大战熟女丰满人妻av-荡女精品导航-岛国aaaa级午夜福利片-岛国av动作片在线观看-岛国av无码免费无禁网站-岛国大片激情做爰视频

專注Java教育14年 全國咨詢/投訴熱線:400-8080-105
動(dòng)力節(jié)點(diǎn)LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁 學(xué)習(xí)攻略 Java單例設(shè)計(jì)模式之單例模式

Java單例設(shè)計(jì)模式之單例模式

更新時(shí)間:2020-05-06 14:51:08 來源:動(dòng)力節(jié)點(diǎn) 瀏覽2991次

    JAVA設(shè)計(jì)模式

    Java設(shè)計(jì)模式其實(shí)算是java在發(fā)展的過程中前人總結(jié)下來的一種經(jīng)驗(yàn),針對(duì)于不同的應(yīng)用場(chǎng)景,可以用不同的設(shè)計(jì)模式來解決問題,同時(shí),在有的場(chǎng)景,可以有多種設(shè)計(jì)模式可以選擇,這就需要我們對(duì)設(shè)計(jì)模式了解得足夠透徹,然后才能去找到最適合的設(shè)計(jì)模式。

    以前我也一直在看設(shè)計(jì)模式,只是一直沒有去系統(tǒng)的學(xué)習(xí),然后轉(zhuǎn)化為博客筆記,加深自己對(duì)設(shè)計(jì)模式的理解。后面會(huì)把這些設(shè)計(jì)模式系統(tǒng)學(xué)習(xí)一遍寫成博客,當(dāng)做是自己學(xué)習(xí)的一種記錄。

    JAVA設(shè)計(jì)模式之單例模式

    java的單例模式應(yīng)該是最簡(jiǎn)單最容易實(shí)現(xiàn),同時(shí)也是面試特別容易遇到的一種設(shè)計(jì)模式了。顧名思義,單例模式就是我們的某個(gè)類在應(yīng)用中需要以單個(gè)實(shí)例的方式存在,不管在哪里以及什么時(shí)候調(diào)用,都是拿的這個(gè)實(shí)例,而不是去重新初始化。

    單例模式在開發(fā)中的應(yīng)用也是很常見的,比如web應(yīng)用的配置對(duì)象的讀取、數(shù)據(jù)庫連接池的設(shè)計(jì)、windows的任務(wù)管理器等等這些。

    雖然單例模式簡(jiǎn)單,實(shí)現(xiàn)所需要的代碼數(shù)量也不多,但是考慮到懶加載、線程安全等問題,其實(shí)也是很容易出問題的,通常面試的時(shí)候,如果考到單例模式也是拿這些問題來考量的。

    同時(shí)單例模式也有多種實(shí)現(xiàn)方式。

    餓漢式

Java單例設(shè)計(jì)模式之單例模式

    懶漢式

Java單例設(shè)計(jì)模式之單例模式

    這種單例模式既實(shí)現(xiàn)了懶加載,也滿足了線程安全,看似非常完美了,但是其實(shí)它并不高效,因?yàn)檫@種方式加鎖在方法上了,因?yàn)殒i粒度的問題,導(dǎo)致每次進(jìn)入方法的只會(huì)有一個(gè)線程,其他線程都會(huì)被擋在方法外,等待前一個(gè)線程執(zhí)行完這個(gè)方法。仔細(xì)想一下,其實(shí)是沒必要的,我們可以將鎖的粒度變得更細(xì),因此也演變出了雙重鎖驗(yàn)證的實(shí)現(xiàn)方式。

    雙重鎖驗(yàn)證

Java單例設(shè)計(jì)模式之單例模式

    這種方式實(shí)現(xiàn)單例模式是最容易在面試中被提到的,這里有兩次判空操作,因此叫雙重鎖驗(yàn)證,為什么這里需要doublecheck,當(dāng)我們想不通的時(shí)候,其實(shí)可以試試反證法,這里如果第一次驗(yàn)證不要的話,可以發(fā)現(xiàn),就和懶漢式其實(shí)是一樣的了,那么這樣就會(huì)造成不高效,那為什么需要第二次的驗(yàn)證呢,可以想想,如果取消第二次的驗(yàn)證,可能會(huì)有多個(gè)線程進(jìn)入if語句,然后單獨(dú)進(jìn)入同步塊,這樣就會(huì)造成多個(gè)實(shí)例,因此兩次驗(yàn)證缺一不可。

    這里需要注意的是volitile這個(gè)關(guān)鍵字,為什么要在instance加這個(gè)關(guān)鍵字,這個(gè)關(guān)鍵字有兩個(gè)作用,一個(gè)是保證instance的內(nèi)存可見性,也就是每次讀寫操作都保證是內(nèi)存中的最新值,另一方面是禁止jvm的重排序優(yōu)化,如果這里不加這個(gè)關(guān)鍵字,由于jvm的重排序優(yōu)化,可能會(huì)導(dǎo)致instance還沒有初始化完成,其他線程就得到了這個(gè)instance的引用值,然后就順理成章的報(bào)錯(cuò)。詳情可以去看周老先生的《深入java虛擬機(jī)》

    內(nèi)部靜態(tài)類

Java單例設(shè)計(jì)模式之單例模式

    內(nèi)部靜態(tài)類的方式來實(shí)現(xiàn)是我比較喜歡的方式了,因?yàn)檫@種方式滿足懶加載,沒有線程安全問題,同時(shí)也十分高效,光看代碼也容易讓人理解。

    枚舉類

Java單例設(shè)計(jì)模式之單例模式

    這種方式應(yīng)該是實(shí)現(xiàn)單例模式最簡(jiǎn)潔的方式了,調(diào)用直接用Singleton.INSTANCE就可以了。

 以上就是動(dòng)力節(jié)點(diǎn)java培訓(xùn)機(jī)構(gòu)的小編針對(duì)“Java單例設(shè)計(jì)模式之單例模式”的內(nèi)容進(jìn)行的回答,希望對(duì)大家有所幫助,如有疑問,請(qǐng)?jiān)诰€咨詢,有專業(yè)老師隨時(shí)為你服務(wù)。

提交申請(qǐng)后,顧問老師會(huì)電話與您溝通安排學(xué)習(xí)

免費(fèi)課程推薦 >>
技術(shù)文檔推薦 >>
主站蜘蛛池模板: 久久久久久综合成人精品 | 欧洲成人在线观看 | 色婷婷资源网 | 国产无套免费网站 | 717影院理论午夜伦八戒 | 国产亚洲高清在线精品99 | 94久久国产乱子伦精品免费 | 成人影院观看 | 精品亚洲欧美高清不卡高清 | 亚洲成人手机在线观看 | 伊人久久精品一区二区三区 | 亚洲国产精品久久久久久 | 久久精品亚洲综合 | 亚洲一区二区中文 | 日日噜噜夜夜狠狠tv视频免费 | 欧美性生活一级 | 国产精品一区二 | 秒播影视 午夜福利毛片 | 国产aaa免费视频国产 | 最新国产精品亚洲 | 久草视频资源在线 | 亚洲国产成人精品91久久久 | www亚洲成人 | 国产区精品一区二区不卡中文 | 欧美精品18xxxhd4k | 色综合天天综合网看在线影院 | 日本岛国片在线观看 | 四虎影院官网 | 九九99热久久精品在线9 | www.亚洲| 欧美日本高清动作片www网站 | 久久国产精品吴梦梦 | 久久草在线视频免费 | 久久精品国产曰本波多野结衣 | 九九手机视频 | 涩涩视频观看 | 亚洲欧美另类专区 | 亚洲成人99| 国产性大片黄在线观看在线放 | 曰本一级毛片免费播放 | 国产成人免费a在线视频色戒 |