为了账号安全,请及时绑定邮箱和手机立即绑定

为什么易失性在双重检查锁定中使用?

为什么易失性在双重检查锁定中使用?

冉冉说 2019-06-21 15:44:40
为什么易失性在双重检查锁定中使用?从…头第一设计模式书中,具有双重检查锁定的单例模式已经实现如下:public class Singleton {     private volatile static Singleton instance;     private Singleton() {}     public static Singleton getInstance() {         if (instance == null) {             synchronized (Singleton.class) {                 if (instance == null) {                     instance = new Singleton();                 }             }         }         return instance;     }}我不明白为什么volatile正在被利用。不volatile使用失败了使用双重检查锁定的目的,即性能?
查看完整描述

3 回答

?
慕容3067478

TA贡献1773条经验 获得超3个赞

好吧,在性能上没有双重检查的锁定。这是一个坏的模式。

把情感放在一边,volatile是因为没有它,当第二个线程通过时instance == null,第一个线程可能不会构造new Singleton()然而:没有人承诺创造这个物体。发生-之前指派给instance对于除实际创建对象的线程之外的任何线程。

volatile反过来建立发生-之前读写之间的关系,并修复中断的模式。

如果您正在寻找性能,请使用Holding内部静态类代替。


查看完整回答
反对 回复 2019-06-21
  • 3 回答
  • 0 关注
  • 749 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信