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?

Antworten auf die Frage(18)

Ihre Antwort auf die Frage