單例模式的作用就是保證類只有乙個例項物件。
分為懶漢式和餓漢式,聽名字就能知道個大概了,直接貼**。
懶漢式:
/**
* 懶漢**模式
*/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...