1. 程式人生 > >設計模式之單例模式(餓漢式+多執行緒情況下的懶漢式單例)

設計模式之單例模式(餓漢式+多執行緒情況下的懶漢式單例)

  今天所記錄的補上昨天未完成的設計模式之單例模式

 餓漢式單例:

    

執行結果:

   

 在編寫餓漢式單例時使用了final 關鍵字進行修飾所以不會出現多執行緒安全的情況產生。

接下來我們完善一下昨天的懶漢式單例:

   首先我們看一下昨天懶漢式單例的執行圖:

    

    發現結果卻是如同我們所期望的那樣,在多次呼叫getInstance()時所獲取到的物件,仍舊屬於同一個物件。

    那麼,我們來看看在多執行緒,情況下,還是如同一樣的嘛?

    

 從上圖可以發現我們多執行緒情況下的單例仍舊可以使用,還是保持只有一個物件。我們多執行幾次看看。

 



嗯哼,怎麼回事,我們已經運行了那麼多次了,好像結果都是正確的,這說明我們的單例模式在多執行緒情況下也是正確的嗎?

我們來一點好玩的東西,在getInstance()中加入執行緒休眠試試:


這裡可以看出我們的單例模式其實並不是一個執行緒安全的,尤其是在多執行緒的情況下,會出現多個物件,這也意味著我們的單例模式,這裡我們最簡單的方法是使用synchronized方法進行修飾:


好了,今天要總結的有兩點:

1.是餓漢式單例的使用。

2.懶漢式單例在多執行緒情況下一定要新增synchronized關鍵字進行修飾