單例模式的執行緒安全問題詳解

2021-10-09 07:09:45 字數 1092 閱讀 7602

單例模式的作用就是保證類只有乙個例項物件。

分為懶漢式和餓漢式,聽名字就能知道個大概了,直接貼**。

懶漢式:

/**

* 懶漢**模式

*/public

class

singleton

// 單例物件

private

static singleton singleton = null;

public singleton getsingleton()

return singleton;

}}

執行緒安全問題:如果有兩個執行緒,同一時刻拿到單例物件,要去靜態工廠辦法訪問,由於工廠辦法沒有鎖,那麼很有可能這兩個執行緒最終會拿到兩個例項。

餓漢式:

/**

* 餓漢式**模式

*/public

class

singleton2

// 單例物件

private

static singleton2 singleton2 =

newsingleton2()

;// 靜態的工廠方法

public

static singleton2 getinstance()

}

餓漢式和懶漢式相比,是執行緒安全的,缺點是比較耗費記憶體,應用一載入就會直接放到堆中。

執行緒安全的餓漢式:

public

class

singleton3

// 單例物件 volatile + 雙重檢測機制 -> 禁止指令重排

private

volatile

static singleton3 singleton3 = null;

// 靜態的工廠方法

public

static singleton3 getinstance()

}}return singleton3;

}}

單例模式的執行緒安全問題

單例會帶來什麼問題?如果多個執行緒同時呼叫這個例項,會有執行緒安全的問題 單例一般用在什麼地方?單例的目的是為了保證執行時只有唯一的乙個例項,最常用的地方比如拿到資料庫的連線,或者spring的中建立beanfactory操作,而這些操作都是呼叫他們的方法來執行某個特定的動作。首先先來認識下兩種模式...

單例模式的執行緒安全問題

大家都知道單例模式有兩種,分別是懶漢式 餓漢式。但是對於餓漢式,由於判斷例項為null與建立物件的操作並不是乙個原子性操作,故在 普通的懶漢式單例 非執行緒安全問題 1 2 created by ywb 3 4public class singleton 910 public static sing...

單例模式及執行緒安全問題

單例模式是為確保乙個類只有乙個例項,並為整個系統提供乙個全域性訪問點的一種模式方法。從概念中體現出了單例的一些特點 1 在任何情況下,單例類永遠只有乙個例項存在 2 單例需要有能力為整個系統提供這一唯一例項 下面是實現 package org.mlinge.s02 public class mysi...