编写线程安全的单例类

时间:2015-12-10 20:45:43

标签: java multithreading thread-safety singleton

我写了一个下面的Singleton类。我不确定这是否是线程安全的单例类?

protected static DataTask instance;

protected DataTask() {
    // some code here
}

public static synchronized void setup() {
    if (instance == null) {
        DataTask setupFully = new DataTask();
        instance = setupFully;
    }
}

public static DataTask getInstance() {
    if (instance == null) {
        setup();
    }
    return instance;
}

1 个答案:

答案 0 :(得分:0)

这是双重检查锁定。它不起作用,因为在设置实例变量时,不能保证非同步方法。可以通过创建实例volatile来强制执行此保证。关于双重检查锁定的文章很多,包括this one.