博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java 单例
阅读量:5013 次
发布时间:2019-06-12

本文共 1317 字,大约阅读时间需要 4 分钟。

最近在网上看到一篇关于 Java 单例的创建问题,虽然是一个 Java 程序员,但是到现在还没有真正的深入了解到 Java 的原理和机制。所以每每看到这样能够“真正”接触 Java 的机会内心总是充满了欣喜。记录下,以后备用。

懒汉模式

public class Singlton{    private static Singleton instance;    private Singlton(){}    public static Singlton getInstance(){        if(instacne == null)            instance = new Singlton();        return instance;    }}

教科书式的写法,但是无法适用于多线程的状态下。

饿汉模式

public class Singleton{    private static Singletion instance = new Singleton();    private Singleton(){}    public static Singleton getInstance(){        return instance;    }}

饿汉模式可以有效的避免多线程的同步问题,不过使用 static 会多多少少牺牲点性能。

静态内部类

public class Singleton{    private static class SingltonHolder{        private static final Singleton INSTANCE = new Singlton();    }    private Singleton(){}    public static final Singleton getInstance(){        return SingletonHolder.INSTANCE;    }}

使用静态内部类的方式,利用 ClassLoder 的机制保证了初始化的时候只有一个线程,并且兼顾了性能——Singleton 类被装载的时候,getInstance 并不会立马初始化,只有调用的时候才会被初始化。

枚举

public enum Singleton{    INSTANCE;    public void method(){    //do something    }}

这种方式 Effective Java 中推荐的方式,很厉害的一种写法。唯一的缺点就是无法继承了吧。

小结

虽然只是创造一个单例,但是其中需要考虑的东西真的有很多。不得不感叹那些编程高手,能够将心思缜密,利用语言的各种特性去编程创造。对于创建单例模式还是比较推荐使用静态内部类的方式创建,不失性能的同时又兼顾安全。但是其实我更加喜欢枚举的方式。

本文由个人 hexo 博客 迁移

date: 2017-04-13 22:27:15

转载于:https://www.cnblogs.com/manastudent/p/10190827.html

你可能感兴趣的文章
SQL2000和SQL2005和SQL2008同时安装问题
查看>>
通过HTTP代理与HOSTS文件的问题
查看>>
PAT1042:Shuffling Machine
查看>>
数据挖掘:实用案例分析
查看>>
《JavaScript网页特效经典300例》
查看>>
UOJ#62. 【UR #5】怎样跑得更快 数论 莫比乌斯反演
查看>>
sybase锁
查看>>
java程序源码
查看>>
MYSQL中的字符串连接符
查看>>
Linux 命令 快捷命令综合
查看>>
装载问题
查看>>
分享一个导出Excel的类
查看>>
webGis概念
查看>>
HDOJ1874 ( 畅通工程续 ) 【单源最短路径】
查看>>
java中 用telnet 判断服务器远程端口是否开启
查看>>
Oracle存储过程的异常处理
查看>>
mysql获取子父级节点
查看>>
jzoj5813
查看>>
laravel 5.7 引入Illuminate\Http\Request 在类内调用 Request 提示不存在的问题
查看>>
[BZOJ 1806] Miners 矿工配餐
查看>>