java - 单例模式

标签 java design-patterns singleton

下面的片段很简单,

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 block 的线程引起的竞争条件,这是一个糟糕的线程安全尝试。

更安全的方法是添加一个额外的 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超越单例。

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

相关文章:

javascript - 在 JavaScript 中重新定义方法

c++ - 如何将抽象类变成单例对象?

java - 尝试仅在变量设置为 false 时运行代码

java - MongoDB 相关的扩展问题

java - 使用 hibernate 与 spring data jpa 和 mysql 组合主键

c++ - 设计一个好的 C++ 包装类来包装多种功能

java - 如何判断 JFrame 窗口是否已经打开?

java - 空白的最终字段 INSTANCE 可能尚未初始化

java - 在 android 中搜索自定义 ListView ?

java - 在java中创建新节点时出错