雙重校驗鎖實現物件單例

2021-10-17 11:05:52 字數 668 閱讀 1975

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...