为什么即使在易失性修复之后仍然不鼓励双重检查锁定?

zin*_*ing 5 java volatile

关于 JMM 的参考文章

值得注意的是,在新内存模型下,像双重检查锁定这样的破坏技术仍然被破坏,并且“修复”双重检查锁定并不是新内存模型努力的目标之一。(然而, volatile 的新语义允许双重检查锁定的常用替代方案之一正常工作,尽管该技术仍然不鼓励使用。

相关讨论:

我可以理解为什么它在没有volatile修复的情况下就坏了。但我不知道为什么即使在修复之后仍然不鼓励它。我注意到在其中一次讨论中存在一些分歧。但如果它真的如参考所建议的那样?这个固定版本仍然不鼓励的原因是什么?

Jan*_*fer 0

首先:在新的 Java MM 中,双重检查锁定习惯不再被破坏。所以你可以在Java中安全地使用它。

还存在无法使用所有其他替代方案的情况(例如枚举或静态初始化)。例如,如果您需要访问非静态引用才能构造单例。

所以只要你完全理解了这个成语,使用它就是安全的。

  • 您可以链接它现在没有损坏的参考吗? (2认同)