解決單例設計模式中懶漢式執行緒安全問題

2021-06-12 15:15:56 字數 1197 閱讀 7312

首先寫個單例:

public class singledemo 

public static singledemo getinstance()

return s;

}}

寫個測試類:

public class threaddemo3 

}

執行結果一直都是true,說明單執行緒下是沒問題的,下面寫個多執行緒來訪問單例

public class threadtest implements runnable 

}

使用多執行緒併發訪問單例:

public class threaddemo3 

}

執行結果如下:

[com.persagy.thread.singledemo@1bc4459, com.persagy.thread.singledemo@150bd4d]

或[com.persagy.thread.singledemo@12b6651]

說明有執行緒併發訪問安全問題,獲取的不一定都是同乙個例項

如何解決執行緒安全問題呢?

當然使用同步鎖機制了啊

下面改進單例:

public class singledemo 

public static synchronized singledemo getinstance()

return s;

}}

加入同步函式後執行緒安全問題解決了

執行多次都是獲取同乙個例項,不會出現2個例項的情況了

[com.persagy.thread.singledemo@12b6651]

但是在多執行緒併發訪問的情況下,每個執行緒每次獲取例項都要判斷下鎖,效率比較低,為了提高效率,我加入了雙重判斷的方法,解決了效率的問題

**如下;

public class singledemo 

public static singledemo getinstance()

}} return s;

}}

用這種方式解決了懶漢式的執行緒安全問題,也提高了效率,但是在實際開發中還是用餓漢式的比較多,畢竟這個**比較多,比較繁瑣。

懶漢式單例設計模式

懶漢式單例設計模式 特點 什麼時候用,什麼時候開闢空間.缺點 多執行緒模式下,會出現問題,達不到單例模式的效果 步驟 1.構造方法私有化 2.定義乙個私有的.靜態的.類的成員變數,但不為其賦初始值 設定初始值為null 3.提供乙個名稱為getinstance 的公共的.靜態的方法,在方法中先判斷步...

單例設計模式(懶漢式)

版本 v1.0 public class study 6 10 物件是方法被呼叫時,才初始化,也叫做物件的延時載入。稱為 懶漢式 single類進記憶體,物件還沒有存在,只有呼叫了getinstance方法時,才建立物件 開發一般用餓漢式 如果乙個人呼叫方法沒有問題,如果多個人一起呼叫就會出問題,就...

執行緒安全的懶漢式單例設計模式

首先回顧一下單利設計模式 單利設計模式是通過某種方式使某個類只能建立乙個物件例項供外界使用。單利設計模式分為懶漢式和餓漢式 餓漢式是執行緒安全的 1 餓漢式單利設計模式 2class single 5public static single getinstance 8 餓漢式實現執行緒安全,可以通過...