重新学了一下单例模式,怕忘记了自己记录一下。
- Double checking locking(DCL)
- 单例模式:在多线程环境下,对外存在一个对象
- 1、构造器私有化–》避免外部new构造器
- 2、提供私有的静态属性–》存储对象的地址
- 3、提供公共的静态方法–》获取属性
public class DoubleCheckingLocking {
//2、静态属性
//没有volatile其他线程可能访问的是一个没有初始化的对象
private static volatile DoubleCheckingLocking instance;
//1、构造方法
private DoubleCheckingLocking(){ }
//3、提供公共静态方法
public static DoubleCheckingLocking getInstance(){
//再次检测,避免不必要的同步已经存在的对象
if ( null != instance){
return instance;
}
synchronized (DoubleCheckingLocking.class) {
if (null == instance) {
instance = new DoubleCheckingLocking();
}
}
return instance;
}