gpt4 book ai didi

Java双重检查锁定解决方案?

转载 作者:行者123 更新时间:2023-12-04 04:47:03 24 4
gpt4 key购买 nike

这是 Java double checked locking 的后续报道.

下面的代码片段有两个有趣的特征。

1) 在对象准备好使用之前,它需要调用一个单独的 init() 方法。所以 volatile 没有帮助(我知道,为什么我不把 init() 中的代码放到构造函数中?这里是为了说明的目的)。

2)它使用tmp变量进行初始化并在初始化完成后分配给实例。

if (instance == null) {
synchronized (mutex) {
if (instance == null) {
AClass tmpInstance = new AClass();
tmpInstance.init();
instance = tmpInstance;
}
}
}

那么,这是否受重新排序问题的影响,即可以在调用 tmpInstance.init() 之前将实例分配给 tmpInstance 吗?

谢谢,
丰富的

最佳答案

重要的是您要分配给 instance在所有初始化完成后,作为最后一个操作。自 instance是(希望)可变的,这将确保所有初始化对以后的读者可见。

顺便说一句,您真的没有必要学习所有允许重新排序的规则:这只是 JIT 编译器实现者的必读内容。

作为 Java 程序员,您需要记住的是 Java 内存模型为您提供的两个简单保证(一个是关于 synchronized ,另一个是关于 volatile )。 JMM 重写(从 JLS 3 开始)的全部目的是让我们能够针对非常简单的并发模型进行编程。

关于Java双重检查锁定解决方案?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18023158/

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