我无法理解A fix that doesn't work下面的代码片段。(我确实阅读了同一页上的解释)。
如果我们有 2 个同步块,这个 DCL 版本是如何损坏的?或者它在 Java5 之后不适用?
// (Still) Broken multithreaded version
// "Double-Checked Locking" idiom
class Foo {
private Helper helper = null;
public Helper getHelper() {
if (helper == null) {
Helper h;
synchronized(this) {
h = helper;
if (h == null)
synchronized (this) {
h = new Helper();
} // release inner synchronization lock
helper = h;
}
}
return helper;
}
// other functions and members...
}