執行緒安全的雙重檢查單例模式

2021-08-18 17:55:37 字數 573 閱讀 3761

/**

* 雙重檢查實現單例模式本身是執行緒不安全的,主要原因在於

instance = new doublechecksingleton()

這句**非原子操作,而編譯器又存在指令重排序的問題,* 1

先分配記憶體,然後將

instance

指向該記憶體,這時

instance

並不為空,但並未初始化,若此時執行緒2呼叫

getinstance

方法,則會直接返回

instance

,然而* instance

並未初始化,因此導致物件訪問失敗。加上

volatile

關鍵字後,可以實現禁止指令重排序,避免這種問題的出現

*@author

snlai

*/public class doublechecksingleton

public static doublechecksingleton getinstance() }}

return

instance;}

}

單例模式的雙重檢查

單例模式 public class singleton public static singleton getinstance return uniqueinstance 其中有兩次判斷是否為空的語句,第一次是為了提高效率,避免每次都要執行同步 塊,第二次判空,是為了避免多執行緒帶來的不安全,當兩個...

雙重檢查鎖實現執行緒安全式的懶漢單例模式

public class singleton public static singleton getuniqueinstance return uniqueinstance 上面的 中,建立乙個私有的構造方法,避免外部建立類的示例 然後定義乙個靜態的類的例項,外部通過getuniqueinstanc...

單例模式之雙重檢查

在實現單例模式時,如果未考慮多執行緒的情況,就容易寫出下面的錯誤 public class singleton public singleton getinstance return uniquesingleton 在多執行緒的情況下,這樣寫可能會導致uniquesingleton有多個例項。比如下...