Wie kann man die Erklärung "Double-Checked Locking is Broken" in Java lösen?
Ich möchte eine verzögerte Initialisierung für Multithreading in Java implementieren.
Ich habe einen Code der Sorte:
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...
}
Und ich erhalte die Erklärung "Double-Checked Locking is Broken".
Wie kann ich das lösen?