為什么下面這段代碼是線程不安全的。
public class Singleton {
private static Singleton singleton;
private Singleton (){}
public static Singleton getSingleton() {
if (singleton == null) { ①
synchronized (Singleton.class) { ②
if (singleton == null) { ③
singleton = new Singleton(); ④
}
}
}
return singleton;
}
}
而下面這段代碼singleton被volatile修飾后就是線程安全的
public class Singleton {
private volatile static Singleton singleton;
private Singleton (){}
public static Singleton getSingleton() {
if (singleton == null) { ①
synchronized (Singleton.class) { ②
if (singleton == null) { ③
singleton = new Singleton(); ④
}
}
}
return singleton;
}
}
添加回答
舉報
0/150
提交
取消