Java小白如何初步掌握java設(shè)計(jì)模式之單例模式!

單例設(shè)計(jì)模式(Singleton Pattern)是最簡(jiǎn)單且常見(jiàn)的設(shè)計(jì)模式之一猿挚,主要作用是提供一個(gè)全局訪問(wèn)且只實(shí)例化一次的對(duì)象咐旧,避免多實(shí)例對(duì)象的情況下引起邏輯性錯(cuò)誤(實(shí)例化數(shù)量可控)…

概述

Java中,單例模式主要分三種:懶漢式單例绩蜻、餓漢式單例铣墨、登記式單例三種。

特點(diǎn)

案例

在這里我推薦下我自己的JAVAqun:479121291办绝,不管你是小白還是大牛伊约,小編我都挺歡迎,不定期分享干貨孕蝉,包括我自己整理的一份最新JAVA資料和零基礎(chǔ)入門(mén)教程碱妆!,歡迎初學(xué)和進(jìn)階中的小伙伴昔驱。

注意事項(xiàng)

解鎖姿勢(shì)

第一種:?jiǎn)我粰z查(懶漢)非線程安全

日志

分析: 在單線程環(huán)境一切正常,balancer1和balancer2兩個(gè)對(duì)象的hashCode一模一樣上忍,由此可以判斷出堆棧中只有一份內(nèi)容骤肛,不過(guò)該代碼塊中存在線程安全隱患,因?yàn)槿狈Ω?jìng)爭(zhēng)條件窍蓝,多線程環(huán)境資源競(jìng)爭(zhēng)的時(shí)候就顯得不太樂(lè)觀了腋颠,請(qǐng)看上文代碼注釋內(nèi)容

第二種:無(wú)腦上鎖(懶漢)線程安全,性能較差吓笙,第一種升級(jí)版

分析: 毫無(wú)疑問(wèn)淑玫,知道synchronized關(guān)鍵字的都知道,同步方法在鎖沒(méi)釋放之前,其它線程都在排隊(duì)候著呢絮蒿,想不安全都不行啊尊搬,但在安全的同時(shí),性能方面就顯得短板了土涝,我就初始化一次佛寿,你丫的每次來(lái)都上個(gè)鎖,不累的嗎(沒(méi)關(guān)系但壮,它是為了第三種做鋪墊的)..

第三種:雙重檢查鎖(DCL)冀泻,完全就是前兩種的結(jié)合體啊,有木有蜡饵,只是將同步方法升級(jí)成了同步代碼塊

1.假設(shè)new LazyLoadBalancer()加載內(nèi)容過(guò)多

2.因重排而導(dǎo)致loadBalancer提前不為空

3.正好被其它線程觀察到對(duì)象非空直接返回使用

存在問(wèn)題: 首先我們一定要清楚弹渔,DCL是不能保證線程安全的,稍微了解過(guò)JVM的就清楚溯祸,對(duì)比C/C++它始終缺少一個(gè)正式的內(nèi)存模型肢专,所以為了提升性能,它還會(huì)做一次指令重排操作您没,這個(gè)時(shí)候就會(huì)導(dǎo)致loadBalancer提前不為空鸟召,正好被其它線程觀察到對(duì)象非空直接返回使用(但實(shí)際還有部分內(nèi)容沒(méi)加載完成)

解決方案: 用volatile修飾loadBalancer,因?yàn)関olatile修飾的成員變量可以確保多個(gè)線程都能夠順序處理氨鹏,它會(huì)屏蔽JVM指令重排帶來(lái)的性能優(yōu)化欧募。

第四種:Demand Holder (懶漢)線程安全,推薦使用

分析: 在Demand Holder中仆抵,我們?cè)贚azyLoadBalancer里增加一個(gè)靜態(tài)(static)內(nèi)部類跟继,在該內(nèi)部類中創(chuàng)建單例對(duì)象,再將該單例對(duì)象通過(guò)getInstance()方法返回給外部使用镣丑,由于靜態(tài)單例對(duì)象沒(méi)有作為L(zhǎng)azyLoadBalancer的成員變量直接實(shí)例化舔糖,類加載時(shí)并不會(huì)實(shí)例化LoadBalancerHolder,因此既可以實(shí)現(xiàn)延遲加載莺匠,又可以保證線程安全金吗,不影響系統(tǒng)性能(居家旅行必備良藥啊)

第五種:枚舉特性(懶漢)線程安全趣竣,推薦使用

分析: 相比上一種摇庙,該方式同樣是用到了JAVA特性:枚舉類保證只有一個(gè)實(shí)例(即使使用反射機(jī)制也無(wú)法多次實(shí)例化一個(gè)枚舉量)

第六種:餓漢單例(天生線程安全),

分析: 利用ClassLoad機(jī)制遥缕,在加載時(shí)進(jìn)行實(shí)例化卫袒,同時(shí)靜態(tài)方法只在編譯期間執(zhí)行一次初始化,也就只有一個(gè)對(duì)象单匣。使用的時(shí)候已被初始化完畢可以直接調(diào)用夕凝,但是相比懶漢模式宝穗,它在使用的時(shí)候速度最快,但這玩意就像自己挖的坑哭著也得跳码秉,你不用也得初始化一份在內(nèi)存中占個(gè)坑…

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末逮矛,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子泡徙,更是在濱河造成了極大的恐慌橱鹏,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,324評(píng)論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件堪藐,死亡現(xiàn)場(chǎng)離奇詭異莉兰,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)礁竞,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,356評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén)糖荒,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人模捂,你說(shuō)我怎么就攤上這事捶朵。” “怎么了狂男?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,328評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵综看,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我岖食,道長(zhǎng)红碑,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,147評(píng)論 1 292
  • 正文 為了忘掉前任泡垃,我火速辦了婚禮析珊,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘蔑穴。我一直安慰自己忠寻,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,160評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布存和。 她就那樣靜靜地躺著奕剃,像睡著了一般。 火紅的嫁衣襯著肌膚如雪捐腿。 梳的紋絲不亂的頭發(fā)上纵朋,一...
    開(kāi)封第一講書(shū)人閱讀 51,115評(píng)論 1 296
  • 那天,我揣著相機(jī)與錄音叙量,去河邊找鬼。 笑死九串,一個(gè)胖子當(dāng)著我的面吹牛绞佩,可吹牛的內(nèi)容都是我干的寺鸥。 我是一名探鬼主播,決...
    沈念sama閱讀 40,025評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼品山,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼胆建!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起肘交,我...
    開(kāi)封第一講書(shū)人閱讀 38,867評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤笆载,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后涯呻,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體凉驻,經(jīng)...
    沈念sama閱讀 45,307評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,528評(píng)論 2 332
  • 正文 我和宋清朗相戀三年复罐,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了涝登。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,688評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡效诅,死狀恐怖胀滚,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情乱投,我是刑警寧澤咽笼,帶...
    沈念sama閱讀 35,409評(píng)論 5 343
  • 正文 年R本政府宣布,位于F島的核電站戚炫,受9級(jí)特大地震影響剑刑,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜嘹悼,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,001評(píng)論 3 325
  • 文/蒙蒙 一叛甫、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧杨伙,春花似錦其监、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,657評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至米死,卻和暖如春锌历,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背峦筒。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,811評(píng)論 1 268
  • 我被黑心中介騙來(lái)泰國(guó)打工究西, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人物喷。 一個(gè)月前我還...
    沈念sama閱讀 47,685評(píng)論 2 368
  • 正文 我出身青樓卤材,卻偏偏與公主長(zhǎng)得像遮斥,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子扇丛,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,573評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容