以下代码很简单,

public MyClass getInstance() {
    if(uniqueInstance == null) {
        uniqueInstance = new MyClass();
    }
    return uniqueInstance;
}


以下是做什么的?

public MyClass getInstance() {
    if(uniqueInstance == null) {
        synchronized(MyClass.class) {
            uniqueInstance = new MyClass();
        }
    }
    return uniqueInstance;
}

最佳答案

试图使其具有线程安全性以防止由至少两个同时进入if块的线程引起的争用情况是一种糟糕的尝试。

一种更安全的方法是添加额外的nullcheck,也称为double-checked locking

public MyClass getInstance() {
    if (uniqueInstance == null) {
        synchronized(MyClass.class) {
            if (uniqueInstance == null) {
                uniqueInstance = new MyClass();
            }
        }
    }
    return uniqueInstance;
}


但是,我通常更喜欢Just Create One pattern而不是Singleton。

关于java - 单例模式,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4357538/

10-12 17:04