gpt4 book ai didi

java - 双重检查锁定 - 它在 Java 中到底有效吗?

转载 作者:行者123 更新时间:2023-12-01 17:30:41 24 4
gpt4 key购买 nike

全部:

这是著名的文章:

The "Double-Checked Locking is Broken" Declaration

它声明该模式在 Java 中不起作用。接近尾声时,它进一步指出,新的 JVM 可以通过使用 volatile 使该模式发挥作用。

但是,在另一篇文章中:Memory Barriers and JVM Concurrency

它说关键字“synchronized”生成内存屏障满栅栏。那么谁是对的呢?这个模式在 Java 中到底有效吗?

最佳答案

基本上有 3 种方法可以修复双重检查锁定:

  • 确保变量声明为 volatile (从 Java 5 开始有效);

  • 首先不要理会它:只需使用同步,不要尝试用花哨的容易出现错误的方法(而且可能毫无意义的方法)搞乱“避免”它;

  • 类加载器为您进行同步。

我已发布example code here .

但是:双重检查锁定确实是一个过时的范例,如果它确实在 Java 中有用过的话。在我看来,它本质上是由 C 程序员移植到 Java 中的,他们没有完全意识到 JVM 有效地有一种更有效(并且正确!)的方法来处理内置于类加载器中的问题,并且对同步的优化是通常最好在 JVM 级别进行。

我见过很多人用这种“模式”弄乱他们的代码。我认为我从未见过任何实际数据表明它有任何好处。

另外:如果您确实有一个遇到同步问题的大型应用程序,那么 Java 的全部理由之一就是它拥有丰富的并发库。看看如何重新设计您的应用程序以使用它们...如果分析数据证明有必要的话。

关于java - 双重检查锁定 - 它在 Java 中到底有效吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11261320/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com