/** * 单例模式:懒汉式基础上加入并发控制,保证多线程环境下,对外存在一个对象 *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; }