/**
 * 单例模式:懒汉式基础上加入并发控制,保证多线程环境下,对外存在一个对象
 *1.构造器私有化-->避免外部new构造器
 *2.提供私有的静态属性-->存储对象的地址
 *3.提供公共的静态方法-->获取属性
 */
public class DoubleCheckedLocking {
    //没有volatile其他线程可能访问一个没有初始化过的对象
    //2.提供私有的静态属性
    private static volatile DoubleCheckedLocking instance;

    //1.构造器私有化
    private DoubleCheckedLocking(){
    }

    //3.提供公共的静态方法
    public static DoubleCheckedLocking getInstance(){
        //再次检测 避免不必要的同步,已经存在对象
        if(null != instance){
            return instance;
        }
        synchronized (DoubleCheckedLocking.class) {
            if (null == instance) {
                instance = new DoubleCheckedLocking();
                //1.开辟空间 //2.初始化对象信息 3.返回对象的引用地址
            }
        }
        return  instance;
    }
12-20 18:45