如何解决Java中的“双重检查锁定是有问题的”声明?

8 浏览
0 Comments

如何解决Java中的“双重检查锁定是有问题的”声明?

我想在Java中为多线程实现延迟初始化。

我有类似的代码:

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();
                    } // 释放内部同步锁
                helper = h;
            } 
        }    
        return helper;
    }
    // 其他函数和成员...
}

我遇到了"双重检查锁定是有问题的"的声明。

我该如何解决这个问题?

0