什麼是單例模式?
乙個類只有乙個例項存在,同時提供能對該例項加以訪
問的靜態訪問方法。
實現方式
單例模式網上有好幾個實現方式,其中比較耳熟的是一下三種:
1 餓漢模式
2 懶漢模式
3 雙重檢查
其中懶漢模式執行緒不安全,餓漢模式與雙重檢查是執行緒安全的,雙重檢查是在懶漢模式的基礎上做修改,達到執行緒安全的目的。
還有兩種推薦使用的模式:
1 靜態內部類實現
2 列舉實現
餓漢模式
餓漢模式是在類載入時建立物件,執行緒安全。
//餓漢模式
public
class
singleton
;public
static singleton getinstance()
}
懶漢模式
懶漢模式為等到第一次需要該類例項時才建立物件,執行緒不安全。
//懶漢模式
public
class
singleton
;public
static singleton getinstance()
return singleton;
}}
雙重檢查
雙重檢查是在懶漢模式基礎上做修改,使得它執行緒安全。
雙重判斷比起方法加鎖的好處是物件建立完成後對物件是否存在的判斷不需要上鎖,效率高。
//雙重檢查
public
class
singleton
;public
static singleton getinstance()
}}return singleton;}}
/*singleton=new singleton()物件的建立在jvm中可能會進行重排序,使用volatile修飾signleton例項變數有效解決該問題。
*/
靜態內部類實現
安全且在多執行緒情況下能保持高效能。
//靜態內部類實現
public
class
singleton
static
class
inner
public
static singleton getinstance()
}
列舉實現
列舉類例項的建立也是執行緒安全的,所以使用列舉來實現單例也是一種比較推薦的方法
//列舉實現
public
enum singleton
public
void
setname
(string name)
}// 呼叫時使用singleton.instance.setname()即可
設計模式 02 單例模式
1 餓漢模式 宣告靜態物件時,已經初始化。public class singleton public static singleton getinstance 2 懶漢模式 第一次呼叫getinstance時進行初始化。缺點 每次呼叫getinstance都進行同步,造成不必要的同步開銷。publi...
設計模式 02 單例模式
參考 需要某個類只保留乙個物件,如資料庫連線 網路連線 執行緒池等。只能有乙個例項 單例類必須建立自己的唯一例項 單列類向其他物件提供這一例項 單例可以繼承與被繼承,方法可以重寫。靜態類不行 單例產生的物件常駐記憶體。靜態類物件執行後會被釋放,被gc清理 單例模式可以延遲載入,靜態類在第一次執行時被...
設計模式 02 單例模式
餓漢式 靜態 塊 懶漢式 執行緒不安全 懶漢式 執行緒安全,同步方法 懶漢式 執行緒不安全,同步 塊 雙重檢查 推薦 靜態內部類 推薦 列舉注意事項和細節說明 所謂的單例設計模式,就是採取一定的方法,保證在整個的軟體系統中,對某個類只能存在乙個物件例項,並且該類只提供乙個取得其物件例項的方法 靜態方...