package com.heu.wsq.basic;
/** * 雙重校驗所鎖實現物件單例(執行緒安全)
* @author wsq
* @date 2021/1/24
*/public
class
singleton
public
static singleton getinstance()
}}return uniqueinstance;
}}
uniqueinstance 採⽤ volatile 關鍵字修飾也是很有必要的, uniqueinstance = new singleton(); 這 段**其實是分為三步執⾏:
為 uniqueinstance 分配記憶體空間
初始化 uniqueinstance
將 uniqueinstance 指向分配的記憶體位址
但是由於 jvm 具有指令重排的特性,執⾏順序有可能變成 1->3->2。指令重排在單執行緒環境下不 會出現問題,但是在多執行緒環境下會導致⼀個執行緒獲得還沒有初始化的例項。例如,執行緒 t1 執 ⾏了 1 和 3,此時 t2 調⽤ getuniqueinstance () 後發現 uniqueinstance 不為空,因此返回 uniqueinstance ,但此時 uniqueinstance 還未被初始化。
單例雙重校驗鎖
public class singledoublelock 1 第一次校驗 因為該類是單例的只建立一次,大部分時間single都不為空,所以不會進行第一次檢驗的 塊內部,從而提高效率 2 第二次校驗 如果single為空,執行緒t1,t2進入第一次檢驗的 塊,t1執行synchronized 塊 n...
雙重校驗鎖實現單例模式
1 先上 public class singleton public static singleton getinstance return instance 2 分析 第一次校驗 instance null 單例模式只需要建立乙個例項,假如例項不為空則不需要去競爭鎖,提高效能 第二次校驗 inst...
單例模式 雙重校驗鎖
單例模式 雙重校驗鎖 author szekinwin public class singleton3 私有化構造方法 private static volatile singleton3 singleton null public static singleton3 getinstance ret...