Como resolver a declaração "Bloqueio duplo verificado está quebrado" em Java?

Quero implementar a inicialização lenta para multithreading em Java.
Eu tenho algum código do tipo:

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...
}

E estou recebendo a declaração "Bloqueio duplo verificado está quebrado".
Como posso resolver isso?

questionAnswers(9)

yourAnswerToTheQuestion