單例模式中的懶漢模式和惡漢模式的區別

2021-07-10 11:12:23 字數 1217 閱讀 3542

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

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

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

/**

* 餓漢模式

*@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;

}}

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

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

單例模式 惡漢懶漢式

只建立乙個例項 自己建立自己的例項,全系統共享這個例項 一 懶漢式 等用到的時候才建立例項 特點 延遲載入,我們需要考慮它的執行緒安全問題,因此可以加鎖,雙重驗證鎖既保證了效能 了執行緒安全 靜態內部類的方法則是在使用的時候才進行載入。二.惡漢式 在第一次載入時就先建立好例項 特點是 執行緒安全的,...

單例模式 懶漢式和惡漢式

author jiyu date 2020 12 09 9 09 description 單例模式 懶漢式 在第一次呼叫的時候例項化 public class singleton2 注意,這裡沒有final private static singleton2 singleton2 null 靜態工廠...

單例模式中的懶漢式和惡漢式

public class singleton public static singleton getsingletoninstance 懶漢式 載入類的時候比較快,執行時比較慢 1,建立私有構造方法,禁止外部直接建立例項 2,建立私有變數例項化物件,私有屬性 不建議在外部直接呼叫我們的成員變數 3,...