設計模式之單例模式(餓漢式+多執行緒情況下的懶漢式單例)
阿新 • • 發佈:2019-01-07
今天所記錄的補上昨天未完成的設計模式之單例模式
餓漢式單例:
執行結果:
在編寫餓漢式單例時使用了final 關鍵字進行修飾所以不會出現多執行緒安全的情況產生。
接下來我們完善一下昨天的懶漢式單例:
首先我們看一下昨天懶漢式單例的執行圖:
發現結果卻是如同我們所期望的那樣,在多次呼叫getInstance()時所獲取到的物件,仍舊屬於同一個物件。
那麼,我們來看看在多執行緒,情況下,還是如同一樣的嘛?
從上圖可以發現我們多執行緒情況下的單例仍舊可以使用,還是保持只有一個物件。我們多執行幾次看看。
嗯哼,怎麼回事,我們已經運行了那麼多次了,好像結果都是正確的,這說明我們的單例模式在多執行緒情況下也是正確的嗎?
我們來一點好玩的東西,在getInstance()中加入執行緒休眠試試:
這裡可以看出我們的單例模式其實並不是一個執行緒安全的,尤其是在多執行緒的情況下,會出現多個物件,這也意味著我們的單例模式,這裡我們最簡單的方法是使用synchronized方法進行修飾:
好了,今天要總結的有兩點:
1.是餓漢式單例的使用。
2.懶漢式單例在多執行緒情況下一定要新增synchronized關鍵字進行修飾