前言
通常我們可以讓乙個全域性變數使得乙個物件被訪問,但它不能防止你例項化多個物件。乙個最好的辦法就是,讓類自身負責儲存它的唯一例項。這個類可以保證沒有其他例項可以被建立,並且它可以提供乙個訪問該例項的方法。
singleton類,定義乙個getinstance操作,允許客戶訪問它的唯一例項。getinstance是乙個靜態方法,主要負責建立自己的唯一例項。
class客戶端**singleton
//此方法是獲得本類例項的唯一全域性訪問點
public
static
singleton getinstance()
return
instance;}}
static多執行緒時的單例void main(string
args)
console.read();
}
classlock是鎖的意思,再同一時刻加了鎖的那一部分,只有乙個執行緒可以進入。singleton
//此方法是獲得本類例項的唯一全域性訪問點
public
static
singleton getinstance()
}return
instance;}}
但是這樣做並不是最好的,程式每次進來都會lock,會比較影響效能,所以我們可以使用雙重鎖定。
class再lock外層增加了乙個例項是否存在的判斷,看起來程式多用了乙個無用判斷,其實不然,最外層判斷是判斷例項是否存在,如果不存在,就加鎖建立,如果沒有裡面一層判斷,那當多執行緒使用時,可能同時兩個執行緒越過第一重判斷,進而多次例項化,這並不是我們想要的結果。所以,解決多執行緒單例的推薦方式是雙重鎖singleton
//此方法是獲得本類例項的唯一全域性訪問點
public
static
singleton getinstance()}}
return
instance;}}
歡迎加入.net 從入門到精通技術討論群→523490820 期待你的加入
不捨得打亂,就永遠學不會復原。被人嘲笑的夢想,才更有實現的價值。
我的部落格:
設計模式之單例模式
前一段時間買了一本秦小波寫的 設計模式之禪 網上對這書的評價很高。現在還沒有看很多,但是有些地方頗有感觸,也並不是所有的地方都能看懂,但是會慢慢研究的。自己對於設計模式的感覺就是乙個字 牛!感覺會23種設計模式並且會熟練運用的人,真的就是大師級的牛人了,設計模式是乙個專案主管或者架構師一定要會的東西...
設計模式之單例模式
package com.xie.singleton public class singleton 提供乙個共有的靜態的入口方法 public static singleton getinstance 懶漢式 延遲載入 提供乙個私有的靜態的成員變數,但不做初始化 private static sing...
設計模式之 單例模式
單例模式 singleton 保證乙個類僅有乙個例項,並提供乙個訪問它的全域性訪問點。單例模式 單件模式 使用方法返回唯一的例項 public class singleton private static singleton instance public static singleton geti...