单身模式

Rag*_*har 1 java singleton design-patterns

以下片段是直截了当的,

public MyClass getInstance() {
    if(uniqueInstance == null) {
        uniqueInstance = new MyClass();
    }
    return uniqueInstance;
}
Run Code Online (Sandbox Code Playgroud)

以下是什么做的?

public MyClass getInstance() {
    if(uniqueInstance == null) {
        synchronized(MyClass.class) {
            uniqueInstance = new MyClass();
        }
    }
    return uniqueInstance;
}
Run Code Online (Sandbox Code Playgroud)

Bal*_*usC 5

尝试使其线程安全以防止由至少两个同时进入if块的线程引起的竞争条件是一种不好的尝试.

更安全的方法是添加额外的nullcheck,也称为双重检查锁定.

public MyClass getInstance() {
    if (uniqueInstance == null) {
        synchronized(MyClass.class) {
            if (uniqueInstance == null) {
                uniqueInstance = new MyClass();
            }
        }
    }
    return uniqueInstance;
}
Run Code Online (Sandbox Code Playgroud)

但是,我通常更喜欢Just Create One模式而不是Singleton.