1. 程式人生 > >【Linux】執行緒安全的單例模式

【Linux】執行緒安全的單例模式

單例模式:一種設計模式,一個物件只能初始化一次。分為餓漢模式和懶漢模式。

單例中懶漢和餓漢的本質區別在於以下幾點:

1、餓漢式是執行緒安全的,在類建立的同時就已經建立好一個靜態的物件供系統使用,以後不在改變。懶漢式如果在建立例項物件時不加上synchronized則會導致對物件的訪問不是執行緒安全的。

2、從實現方式來講他們最大的區別就是懶漢式是延時載入,他是在需要的時候才建立物件,而餓漢式在虛擬機器啟動的時候就會建立,餓漢式無需關注多執行緒問題,寫法簡單明瞭,能用則用。但是它是載入類時建立例項。所以如果是一個工廠模式,快取了很多例項,那麼就得考慮效率問題,因為這個類一載入則把所有例項不管用不用一塊建立。

3、兩者建立單例物件的時間不同。“懶漢式”是在你真正用到的時候才去建這個單例物件,“餓漢式”是在不管用不用得上,一開始就建立這個單例物件。

擴充套件:

1、單例模式的優點有:

(1)例項控制:單例模式會阻止其他物件例項化其自己的單例物件的副本,從而確保所有物件都訪問唯一例項。

(2)靈活性:因為類控制了例項化過程,所以類可以靈活更改例項化過程。

2、單例模式的缺點有:

(1)開銷:雖然數量很少,但如果每次物件請求引用時都要檢查是否存在類的例項,將仍然需要一些開銷。可以通過使用靜態初始化解決此問題。

(2)可能的開發混淆:使用單例物件(尤其在類庫中定義的物件)時,開發人員必須記住自己不能使用new關鍵字例項化物件。因為可能無法訪問庫原始碼,因此應用程式開發人員可能會意外發現自己無法直接例項化此類。

詳細程式碼參考單例模式