DCL : Double Check Lock
volatile 作用:1.线程可见;2.禁止指令重排;
/**
* 懒汉式 之双重检查
* lazy loading 懒加载
* 懒汉式升级版
*
*
*/
public class SingletonDemo3 {
/*
添加volatile 解决指令重排发送的问题,防止获取的对象是半初始化
*/
private static volatile SingletonDemo3 SINGLETON ;
private SingletonDemo3(){
}
public static SingletonDemo3 getInstance() {
if(SINGLETON==null){//第一次判断如果已经实例化了,直接return.
synchronized (SingletonDemo3.class){
if(SINGLETON==null){//第二次判断是解决多线程问题
try {
Thread.sleep(1);
} catch (InterruptedException e) {