我写了一个下面的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;
}
答案 0 :(得分:0)
这是双重检查锁定。它不起作用,因为在设置实例变量时,不能保证非同步方法。可以通过创建实例volatile
来强制执行此保证。关于双重检查锁定的文章很多,包括this one.