【发布时间】:2013-08-02 17:52:18
【问题描述】:
这是Java double checked locking 的后续报道。
以下代码 sn-p 有 2 个有趣的特征。
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?
谢谢, 丰富
【问题讨论】:
标签: java synchronization singleton double-checked-locking