單例模式Singleton(餓漢式和懶漢式)

2021-08-15 18:53:30 字數 1159 閱讀 6787

單例模式在我們開發中經常會用到的,不知道你所喜歡用餓漢模式還是喜歡懶漢模式呢?為什麼會出現有兩種方式來實現單例模式?

我看這其中必蹊蹺,你怎麼看?

我們來看一下懶漢模式和餓漢模式的實現**。

/**

* 餓漢模式

*@author zhou.ni

*@versioncode 1 《每次修改提交前+1>

*/public

class

hungrysingle

public

static hungrysingle getinstance()

}

在餓漢模式中,初始化變數的時候最好加上 final 關鍵字,這樣比較/**

* 懶漢模式

* @author zhou.ni

* @versioncode 1 《每次修改提交前+1>

*/ public class lazysingle

public static lazysingle getinstance() }}

return sinstance;

}}奇怪,我的懶漢模式不是這樣寫的?為什麼要這樣寫呢?

public

static lazysingle getinstance()

return sinstance;

}

一般這樣寫的,在大多數情況下這樣寫是沒問題的。但是如果在多執行緒併發執行的時候,就會很容易出現安全隱患。

第乙個執行緒進來判斷 sinstance == null,還沒有new 出例項的時候 。這個時候第二個執行緒也進來了,判斷的sinstance 也是 null,然後也會 new 出例項的,這樣就不是我們所要的單例模式了。

那我們就需要加鎖了,使用 synchronized 關鍵字。

public

static lazysingle getinstance()

return sinstance;

}}

這樣我們的安全隱患就被解決了,但是同樣帶來了乙個問題。那就是每次都要判斷鎖,程式的執行效率就會比較低。所以我們就應該儘量減少判斷鎖的次數,以提高執行效率。加上雙重判斷,也就是最開始的**。

推薦使用餓漢模式,簡單,安全。

單例模式

Singleton 單例模式 餓漢

直接照著boost庫的乙個比較廣泛的單例模式寫的,一字不錯,boost有很多單例模式可以研究 最近專案用到乙個單例模式,是教科書使得,懶漢模式 這個是 餓漢模式 優點是在main函式 開始之前就構造例項了,這樣是執行緒安全的,效率比較高,畢竟不是在堆上建立的一般單例不需要考慮記憶體的洩露,靜態變數生...

單例模式 Singleton 懶漢 餓漢模式

其他文章 include stdafx.h include if 0 單例模式指乙個類只允許有乙個例項,並提供乙個訪問它的全域性訪問點,使得系統中只有唯一的 乙個物件例項,型別分為懶漢模式和餓漢模式 應用 常用於管理資源,如日誌 執行緒池 實現方法 建構函式宣告為private或protect防止被...

(二)singleton單例模式 餓漢模式

include common.h final表示該類不可被繼承 餓漢式 class cmysingleton final cmysingleton cmysingleton char pdata cmysingleton cmysingleton cmysingleton cmysingleton ...