直接上代码
public class LazyDoubleCheckSingleton {
// 不加volatile可能会导致半对象问题(DLL),原因是new LazyDoubleCheckSingleton()创建过程会被分为三个步骤
private volatile static LazyDoubleCheckSingleton lazy = null;
private LazyDoubleCheckSingleton(){}
public static LazyDoubleCheckSingleton getInstance(){
if(lazy == null){
synchronized (LazyDoubleCheckSingleton.class){
//双重检查,防止线程安全的同时最大化增加性能
if(lazy == null){
lazy = new LazyDoubleCheckSingleton();
}
}
}
return lazy;
}
}
以上即是双重检查锁的一个典型案例,保证线程安全性的前提下最大化提升性能