1. 程式人生 > >單例設計模模式——懶漢式為什麼執行緒不安全

單例設計模模式——懶漢式為什麼執行緒不安全

單例設計模式分為兩種
餓漢式,懶漢式
無論哪一種,思想就三步,
0;就一個例項,則不能被例項化,所有建構函式私有的
1:提供一個例項
2:提供一個供外部訪問的方法
懶漢式執行緒不安全,那為什麼不安全呢?看程式碼!!!

假設開始執行緒0進入,判斷instance為空,在將要建立例項時,cpu切換,

執行緒1又進來了,同樣instance為空 建立了例項,這是cpu切換回來到0執行緒,繼續建立例項

可見,經過分析共建立了 兩個例項,還談什麼單例。

改進


可以保證執行緒安全同時又提高了效率。

假設0執行緒進來,instance為空,進入同步程式碼塊,cpu切換,

執行緒1進來,instance為空,在同步程式碼塊外,因為此時0正在裡面

ok,cup切換,執行建立例項,當1在進入程式碼塊後,此時instace不為空,直接返回instance

當在有執行緒進來instance不為空,不用執行同步程式碼塊,效率提供了。

結論:一般開發都是餓漢式,因為不管怎麼樣,都是需要例項,那就不如先載入了(自己理解的),