單例模式

Java中單例模式是一種常見(jiàn)的設(shè)計(jì)模式

三種單例模式?

懶漢式單例家浇、餓漢式單例、登記式單例碴裙。

單例模式有以下特點(diǎn):

? ??????1、單例類只能有一個(gè)實(shí)例点额。

  2舔株、單例類必須自己創(chuàng)建自己的唯一實(shí)例。

  3还棱、單例類必須給所有其他對(duì)象提供這一實(shí)例载慈。


????單例模式確保某個(gè)類只有一個(gè)實(shí)例,而且自行實(shí)例化并向整個(gè)系統(tǒng)提供這個(gè)實(shí)例珍手。在計(jì)算機(jī)系統(tǒng)中办铡,線程池、緩存琳要、日志對(duì)象寡具、對(duì)話框、打印機(jī)稚补、顯卡的驅(qū)動(dòng)程序?qū)ο蟪1辉O(shè)計(jì)成單例童叠。這些應(yīng)用都或多或少具有資源管理器的功能。每臺(tái)計(jì)算機(jī)可以有若干個(gè)打印機(jī)课幕,但只能有一個(gè)Printer Spooler厦坛,以避免兩個(gè)打印作業(yè)同時(shí)輸出到打印機(jī)中。每臺(tái)計(jì)算機(jī)可以有若干通信端口乍惊,系統(tǒng)應(yīng)當(dāng)集中管理這些通信端口杜秸,以避免一個(gè)通信端口同時(shí)被兩個(gè)請(qǐng)求同時(shí)調(diào)用∪笠铮總之撬碟,選擇單例模式就是為了避免不一致狀態(tài),避免政出多頭凡橱。


一小作、懶漢式單例(面試常問(wèn))

1//懶漢式單例類.在第一次調(diào)用的時(shí)候?qū)嵗约? ?

public class Singleton {

? ? private Singleton() {}

? ? private static Singleton single=null;

? ? //靜態(tài)工廠方法?

? ? public static Singleton getInstance() {

? ? ? ? if (single == null) {

? ? ? ? ? ? single = new Singleton();

? ? ? ? }

? ? ? ? return single;

? ? }

}

Singleton通過(guò)將構(gòu)造方法限定為private避免了類在外部被實(shí)例化,在同一個(gè)虛擬機(jī)范圍內(nèi)稼钩,Singleton的唯一實(shí)例只能通過(guò)getInstance()方法訪問(wèn)顾稀。

  (事實(shí)上坝撑,通過(guò)Java反射機(jī)制是能夠?qū)嵗瘶?gòu)造方法為private的類的静秆,那基本上會(huì)使所有的Java單例實(shí)現(xiàn)失效粮揉。此問(wèn)題在此處不做討論,姑且掩耳盜鈴地認(rèn)為反射機(jī)制不存在抚笔。)

  但是以上懶漢式單例的實(shí)現(xiàn)沒(méi)有考慮線程安全問(wèn)題扶认,它是線程不安全的,并發(fā)環(huán)境下很可能出現(xiàn)多個(gè)Singleton實(shí)例殊橙,要實(shí)現(xiàn)線程安全辐宾,有以下三種方式,都是對(duì)getInstance這個(gè)方法改造膨蛮,保證了懶漢式單例的線程安全叠纹,如果你第一次接觸單例模式,對(duì)線程安全不是很了解敞葛,可以先跳過(guò)下面這三小條誉察,去看餓漢式單例,等看完后面再回頭考慮線程安全的問(wèn)題:

1惹谐、在getInstance方法上加同步(性能較差)

public static synchronized Singleton getInstance() {

? ? ? ? if (single == null) {

? ? ? ? ? ? single = new Singleton();

? ? ? ? }

? ? ? ? return single;

}

2持偏、雙重檢查鎖定(DCL 雙檢查鎖機(jī)制)推薦

public static Singleton getInstance() {

? ? ? ? if (singleton == null) {

? ? ? ? ? ? synchronized (Singleton.class) {

? ? ? ? ? ? ? if (singleton == null) {

? ? ? ? ? ? ? ? ? singleton = new Singleton();

? ? ? ? ? ? ? }

? ? ? ? ? ? }

? ? ? ? }

? ? ? ? return singleton;

? ? }

3、靜態(tài)內(nèi)部類 推薦

public class Singleton {

? ? private static class LazyHolder {

? ? ? private static final Singleton INSTANCE = new Singleton();

? ? }

? ? private Singleton (){}

? ? public static final Singleton getInstance() {

? ? ? return LazyHolder.INSTANCE;

? ? }

}

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末氨肌,一起剝皮案震驚了整個(gè)濱河市鸿秆,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌儒飒,老刑警劉巖谬莹,帶你破解...
    沈念sama閱讀 218,755評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異桩了,居然都是意外死亡附帽,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門井誉,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)蕉扮,“玉大人票渠,你說(shuō)我怎么就攤上這事疆前□寮荆” “怎么了研儒?”我有些...
    開封第一講書人閱讀 165,138評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)考余。 經(jīng)常有香客問(wèn)我技即,道長(zhǎng)未蝌,這世上最難降的妖魔是什么蔽午? 我笑而不...
    開封第一講書人閱讀 58,791評(píng)論 1 295
  • 正文 為了忘掉前任易茬,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘抽莱。我一直安慰自己范抓,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,794評(píng)論 6 392
  • 文/花漫 我一把揭開白布食铐。 她就那樣靜靜地躺著匕垫,像睡著了一般。 火紅的嫁衣襯著肌膚如雪虐呻。 梳的紋絲不亂的頭發(fā)上象泵,一...
    開封第一講書人閱讀 51,631評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音铃慷,去河邊找鬼单芜。 笑死,一個(gè)胖子當(dāng)著我的面吹牛犁柜,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播堂淡,決...
    沈念sama閱讀 40,362評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼馋缅,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了绢淀?” 一聲冷哼從身側(cè)響起萤悴,我...
    開封第一講書人閱讀 39,264評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎皆的,沒(méi)想到半個(gè)月后覆履,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,724評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡费薄,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評(píng)論 3 336
  • 正文 我和宋清朗相戀三年硝全,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片楞抡。...
    茶點(diǎn)故事閱讀 40,040評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡伟众,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出召廷,到底是詐尸還是另有隱情凳厢,我是刑警寧澤,帶...
    沈念sama閱讀 35,742評(píng)論 5 346
  • 正文 年R本政府宣布竞慢,位于F島的核電站先紫,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏筹煮。R本人自食惡果不足惜遮精,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,364評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望寺谤。 院中可真熱鬧仑鸥,春花似錦吮播、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至疮胖,卻和暖如春环戈,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背澎灸。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工院塞, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人性昭。 一個(gè)月前我還...
    沈念sama閱讀 48,247評(píng)論 3 371
  • 正文 我出身青樓拦止,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親糜颠。 傳聞我的和親對(duì)象是個(gè)殘疾皇子汹族,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,979評(píng)論 2 355