23种设计模式之懒汉模式
/**
* 单例设计模式之懒汉模式
*/
public class SingletonLazy {
//提供一个实例 volatile --> java关键字 可以禁止创建对象时指令重排
private static volatile SingletonLazy instance;
//私有化构造方法
private SingletonLazy(){};
//对外只提供一个获取该实例的方法
private static SingletonLazy getInstance(){
//双重校验锁,防止高并发创建多个实例
if(instance != null){
return instance;
}
synchronized (SingletonLazy.class){
if(instance != null){
return instance;
} else {
/**
* instance = new SingletonLazy(); 并不是原子性操作
* 1.分配空间给对象
* 2.在空间内创建对象
* 3.将对象赋值给引用的instance
* (指令重排)
* 如果 线程执行顺序是 132 会把值写进主内存,
* 其他线程会读取到instance最新的值,但这不是一个完整的对象
*/
instance = new SingletonLazy();
}
}
return instance;
}
}