1.代码
/**
* 双重检测锁实现单例模式
* @author lenovo
*
*/
public class SingletonDemo3 {
private static SingletonDemo3 instance = null;
public static SingletonDemo3 getInstance(){
if(instance == null){
SingletonDemo3 sc;
synchronized(SingletonDemo3.class){
sc = instance;
if(sc == null){
synchronized(SingletonDemo3.class){
if(sc == null){
instance = new SingletonDemo3();
}
}
instance = sc;
}
}
}
return instance;
}
}
2.说明
2.1.由于编译器优化原因和jvm内部模型原因,偶尔会出问题,不建议使用;
2.2.该模式将同步内容,下放到if内部,提高了执行效率,不必每次获取对象时都进行同步,只有第一次才同步,创建了以后就没必要了。