這是從Java double checked locking後續。Java雙重檢查鎖定解決方案?
以下代碼片段有2個有趣的特徵。
1)它需要在對象準備好使用之前調用一個單獨的init()方法。所以volatile不起作用(我知道,爲什麼我不把代碼放入init()到構造函數中呢?這裏就是爲了說明目的)。
2)它使用一個tmp變量來完成初始化並在初始化完成後分配給實例。
if (instance == null) {
synchronized (mutex) {
if (instance == null) {
AClass tmpInstance = new AClass();
tmpInstance.init();
instance = tmpInstance;
}
}
}
那麼,這個問題到重排序問題,即,可以例如被前tmpInstance.init()分配給tmpInstance被稱爲?
謝謝, 富