從頭部首先設計模式的書,以雙重檢查鎖定Singleton模式已經被如下實施:爲什麼揮發性使用在這個例子中雙重檢查鎖定
public class Singleton {
private volatile static Singleton instance;
private Singleton() {}
public static Singleton getInstance() {
if (instance == null) {
synchronized (Singleton.class) {
if (instance == null) {
instance = new Singleton();
}
}
}
return instance;
}
}
我不明白爲什麼volatile
是被用過的。 volatile
的使用不符合使用雙重檢查鎖定的目的,即性能?
我以爲雙重檢查鎖定被打破,有人修復它嗎? –
對於它的價值,我發現Head First設計模式是一本可以借鑑的可怕書。當我回顧它時,現在我已經在其他地方學習過模式,但是如果不知道它真的沒有達到它的目的,就會學習它。但它很受歡迎,所以也許只是我變得密集。 :-) – corsiKa
@DavidHeffernan我已經看到這個例子被用作可以信任jvm來執行DCL的一種方式。 –