最近在學習設計模式中的單例模式,寫下此篇總結,權當筆記。
單例模式是一種常見的設計模式。為了保持程式執行時jvm中單例物件只存在乙個,這樣的方式有這些優點:省去了繁多的new關鍵字的使用,節省了系統的開銷,減輕了cg**的壓力,在有的系統中要求只能擁有乙個例項,只有這樣才能控制系統的核心邏輯不會錯。
在使用單例模式時,可以使用如下例子的方法建立:
public
class single
//建立靜態方法,返回本類的例項
public
static single getsingle()
return sin;
}}
public
static single getsingle()
}return sin;
}
使用關鍵字似乎可以完成期望,但是jvm在完成賦值和建立物件上是不同步的,也就是說在sin例項化的時候,jvm先申請了乙個空記憶體,然後直接賦值給sin(這是jvm還沒有對sin進行例項化)。這樣sin就不null,執行緒b就不經過sin物件的例項化,但這是sin物件實際只是乙個空的記憶體引用。這樣執行緒b在後續的程式執行中就會出現問題。
其實比較完善且常使用的方式是這樣的:
public
class single
public
static
getsingle()
}
這個改進的例子原理是,在類載入時,載入過程中是執行緒互斥的。這樣,就保證了例項過程中的執行緒互斥。 多執行緒中的單例模式
第一種寫法 餓漢式 public class singleobject1 public static singleobject1 getinstance 第二種寫法 懶漢式 在多執行緒環境下不安全,會產生多個例項 public class singleobject2 public singleobj...
多執行緒中的單例模式
第一種寫法 餓漢式 餓漢式 public class singleobject1 public static singleobject1 getinstance 第二種寫法 懶漢式 1 迭代一 懶漢式 在多執行緒環境下不安全,會產生多個例項 public class singleobject2 pu...
多執行緒 單例模式
單例模式 是非常典型常用的一種設計模式 乙份資源只能被申 載一次 單例模式的方法建立的類在當前程序中只有乙個例項 資源的程式初始化的時候就去載入,後面使用的時候直接使用,使用的時候比較流暢,有可能會載入用不上的資源,導致程式初始化時間比較慢。include class single instance...