05章 - 安全发布对象

1. 在静态初始化函数中初始化一个对象引用

2. 将对象的引用保存到volatile类型域或者AtomicReference对象中

3. 将对象的引用保存到某个正确构造对象的final类型域中

4. 讲对象的引用保存到一个由锁保护的域中

1. 单例模式

/**
* 懒汉模式 -》 双重同步锁单例模式
* 单例实例在第一次使用时进行创建
*/
@ThreadSafe
public class SingletonExample5 {

   // 私有构造函数
   private SingletonExample5() {

   }

   // 1、memory = allocate() 分配对象的内存空间
   // 2、ctorInstance() 初始化对象
   // 3、instance = memory 设置instance指向刚分配的内存

   // 单例对象 volatile + 双重检测机制 -> 禁止指令重排
   private volatile static SingletonExample5 instance = null;

   // 静态的工厂方法
   public static SingletonExample5 getInstance() {
       if (instance == null) { // 双重检测机制        // B
           synchronized (SingletonExample5.class) { // 同步锁
               if (instance == null) {
                   instance = new SingletonExample5(); // A - 3
               }
           }
       }
       return instance;
   }
}

猜你喜欢

转载自blog.csdn.net/weixin_33711641/article/details/87120578