欧美亚洲自拍偷拍_日本一区视频在线观看_国产二区在线播放_亚洲男人第一天堂

二維碼
企資網(wǎng)

掃一掃關(guān)注

當(dāng)前位置: 首頁(yè) » 企業(yè)資訊 » 資訊 » 正文

單例模式,關(guān)鍵字級(jí)別詳解

放大字體  縮小字體 發(fā)布日期:2021-09-01 05:50:36    作者:企資小編    瀏覽次數(shù):141
導(dǎo)讀

大家好,我是課代表。歡迎關(guān)注我的公眾號(hào)_Java課代表,原創(chuàng)實(shí)戰(zhàn)干貨首發(fā)地兒,不要錯(cuò)過(guò)呦!來(lái),我們開(kāi)始今天的分享!0.前言如果你去問(wèn)一個(gè)寫過(guò)幾年代碼的程序員用過(guò)哪些設(shè)計(jì)模式,我打賭,90_以上的回答里面會(huì)帶【單

大家好,我是課代表。歡迎關(guān)注我的公眾號(hào)_Java課代表,原創(chuàng)實(shí)戰(zhàn)干貨首發(fā)地兒,不要錯(cuò)過(guò)呦!

來(lái),我們開(kāi)始今天的分享!

0.前言

如果你去問(wèn)一個(gè)寫過(guò)幾年代碼的程序員用過(guò)哪些設(shè)計(jì)模式,我打賭,90_以上的回答里面會(huì)帶【單例模式】。甚至有的面試官會(huì)直接問(wèn)_說(shuō)一下你用過(guò)哪些設(shè)計(jì)模式,單例就不用說(shuō)了。你看,連面試官都聽(tīng)煩了,火爆程度可見(jiàn)一斑。

不過(guò),看似簡(jiǎn)單的單例模式,里面蘊(yùn)含了很多Java基礎(chǔ),日常開(kāi)發(fā)過(guò)程中課代表見(jiàn)過(guò)很多不規(guī)范的,甚至是有問(wèn)題的單例實(shí)現(xiàn)。所以整理此文,總結(jié)一下單例模式的最佳實(shí)踐。

1、懶加載(懶漢)

所謂懶加載,就是直到第一次被調(diào)用時(shí)才加載。其實(shí)現(xiàn)需要考慮并發(fā)問(wèn)題和指令重排,代碼如下_

public class Singleton {    private volatile static Singleton instance; //①    private Singleton() { //②    }    public static Singleton getInstance() {        if (instance __ null) {//③            synchronized (Singleton.class) {                if (instance __ null) {//④                    instance _ new Singleton();//⑤                }            }        }        return instance;    }}

這段代碼精簡(jiǎn)至極,沒(méi)有一個(gè)字符是多余的,下面逐行解讀一下_

首先,注意到①處的volatile關(guān)鍵字,她具備兩項(xiàng)特性_

一是保證此變量對(duì)于所有線程的可見(jiàn)性。即當(dāng)一條線程修改了這個(gè)變量的值,新值對(duì)于其他線程來(lái)說(shuō)是可以立即得知的。

二是禁止指令重排序優(yōu)化。

這里解釋一下指令重排序優(yōu)化_

代碼 ⑤ 處的instance _ new Singleton();并不是原子的,大體可分為如下 3 步_

    分配內(nèi)存調(diào)用構(gòu)造函數(shù)初始化成實(shí)例
  1. instance指向分配的內(nèi)存空間

JVM 允許在保證結(jié)果正確的前提下進(jìn)行指令重排序優(yōu)化。即如上 3 步可能的順序?yàn)?->2->3 或 1->3->2 。如果順序是 1->3->2 ,當(dāng) 3 執(zhí)行完,2 還未執(zhí)行時(shí),另一個(gè)線程執(zhí)行到代碼 ③ 處,發(fā)現(xiàn)instance不為null,直接返回還未初始化好的instance并使用,就會(huì)報(bào)錯(cuò)。

所以使用volatile,就是為了保證線程間的可見(jiàn)性和防止指令重排。

其次,代碼②處將構(gòu)造函數(shù)聲明為private目的在于阻止使用new Singleton()這樣的代碼生成新實(shí)例。

最后,當(dāng)客戶端調(diào)用Singleton.getInstance()時(shí),先檢查是否已經(jīng)實(shí)例化(代碼③),未實(shí)例化時(shí)同步代碼塊,然后再次檢查是否已實(shí)例化(代碼④),然后才執(zhí)行代碼⑤。兩次檢查的意義在于,防止synchronized同步過(guò)程中其他線程進(jìn)行了實(shí)例化。

這就是著名的雙重檢查鎖(Double check lock)實(shí)現(xiàn)單例,也即懶加載。

TIPS:

網(wǎng)上也有直接對(duì)getInstance()方法加鎖的版本,這樣大范圍的方法級(jí)別加鎖會(huì)導(dǎo)致并發(fā)變低,實(shí)際上第一次調(diào)用生成實(shí)例之后,后續(xù)獲取實(shí)例根本不需要并發(fā)控制了。而本例的雙重檢查鎖版本可以避免此并發(fā)問(wèn)題。

2、預(yù)加載(餓漢)

與懶加載相對(duì)應(yīng),預(yù)加載是在類加載時(shí)就已經(jīng)初始化好了,所以是天然線程安全的,代碼如下_

public class Singleton {    private static final Singleton instance _ new Singleton();// ①        private Singleton(){}        public static Singleton getInstance(){        return instance;    }}

注意到 ① 處的類變量使用了final

這里用final更多的意義在于提供語(yǔ)法約束。畢竟你是單例,就只有這一個(gè)實(shí)例,不可能再指向另一個(gè)。instance有了final的約束,后面再有人不小心編寫了修改其指向的代碼就會(huì)報(bào)語(yǔ)法錯(cuò)誤。

這就好比@Override注解,你能保證寫對(duì)方法名和參數(shù),那不寫注解也沒(méi)問(wèn)題,但是有了注解的約束,編譯器就會(huì)幫你檢查,還能防止別人亂改。

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

此方法和預(yù)加載原理相同,都是利用JVM類加載的特性實(shí)現(xiàn)天然的線程安全,不同之處在于,靜態(tài)內(nèi)部類做到了延遲加載。

public class Singleton {        private static class SingletonHolder {        private static Singleton instance _ new Singleton();    }        private Singleton(){}    public static Singleton getInstance() {        return SingletonHolder.instance;    }}

SingletonHolder 是靜態(tài)內(nèi)部類,當(dāng)外部類Singleton被加載的時(shí)候并不會(huì)創(chuàng)建任何實(shí)例,只有當(dāng)Singleton.getInstance()被調(diào)用的時(shí)候,才會(huì)創(chuàng)建Singleton實(shí)例,這一切由 JVM 天然完成,所以既保證了線程安全,又實(shí)現(xiàn)了延遲加載。

4、枚舉

沒(méi)錯(cuò),枚舉可以實(shí)現(xiàn)單例,而且這種方式是《Effective Java中文版》第二版 中的推薦實(shí)現(xiàn)方式。代碼極其簡(jiǎn)單_

public enum Singleton {        INSTANCE;    public void doSomeThing(){        System.out.println("done");    }}

使用時(shí)直接Singleton.INSTANCE.doSomeThing();即可。

這里主要利用了枚舉的如下兩個(gè)特性_

枚舉的構(gòu)造器總是私有的,所以不必像前幾種方式一樣顯式定義私有構(gòu)造方法
  • 枚舉類中的每個(gè)值,都是實(shí)例(只有INSTANCE這一個(gè)實(shí)例)

    除此之外,枚舉還附帶了一些額外好處_無(wú)償?shù)靥峁┝诵蛄谢瘷C(jī)制,還可以防止通過(guò)多次反序列化生成多個(gè)實(shí)例。

    鑒于此,單例的最佳實(shí)踐就是用枚舉來(lái)實(shí)現(xiàn)。

    5、總結(jié)

    事實(shí)上,單例的寫法并不止于本文所提的這 4 種,你可能還會(huì)看到很多其他變種,她們或多或少都存在一些缺陷,比如,懶加載方式將synchronized作用于整個(gè)方法上也能實(shí)現(xiàn),但頻繁加鎖,釋放鎖會(huì)產(chǎn)生性能瓶頸,而完全去掉鎖又會(huì)帶來(lái)并發(fā)問(wèn)題。

    所以,只要吃透了文中列出的這 4 種單例方式,就能做到舉一反三,見(jiàn)到別人寫的單例也能一眼看出對(duì)錯(cuò)。

    文中所列的 4 種單例模式,除了枚舉之外,全都用到了static關(guān)鍵字,《Java 虛擬機(jī)規(guī)范》 規(guī)定,有幾種情況必須立即對(duì)類進(jìn)行“初始化”,其中涉及static的場(chǎng)景如下_

    讀取或設(shè)置一個(gè)類型的靜態(tài)字段(被 final 修飾、已在編譯期把結(jié)果放入常量池的靜態(tài)字段除外)的時(shí)候。

    調(diào)用一個(gè)類型的靜態(tài)方法的時(shí)候。

    懶加載,預(yù)加載和靜態(tài)內(nèi)部類正是利用了這兩點(diǎn)特性。

    對(duì)static關(guān)鍵字遺忘的同學(xué)可以參看我的另一篇文章_《一題搞定static關(guān)鍵字》

    最后,再次強(qiáng)調(diào)一下,如果大家開(kāi)發(fā)中需要手寫單例,建議聽(tīng)從 Joshua Bloch在《Effective Java中文版》第二版 中的建議_

    單元素的枚舉類型已經(jīng)成為實(shí)現(xiàn) Singleton 的最佳方法

    參考資料_

    1、《Effective Java中文版》 Joshua Bloch 第二版 P15

    2、《深入理解 Java 虛擬機(jī)》 周志明 第3版,P444-P448,P264

    3、深入淺出單實(shí)例SINGLETON設(shè)計(jì)模式

    相關(guān)原創(chuàng)推薦

    一題搞定static關(guān)鍵字

  •  
    (文/企資小編)
    免責(zé)聲明
    本文僅代表作發(fā)布者:企資小編個(gè)人觀點(diǎn),本站未對(duì)其內(nèi)容進(jìn)行核實(shí),請(qǐng)讀者僅做參考,如若文中涉及有違公德、觸犯法律的內(nèi)容,一經(jīng)發(fā)現(xiàn),立即刪除,需自行承擔(dān)相應(yīng)責(zé)任。涉及到版權(quán)或其他問(wèn)題,請(qǐng)及時(shí)聯(lián)系我們刪除處理郵件:weilaitui@qq.com。
     

    Copyright ? 2016 - 2025 - 企資網(wǎng) 48903.COM All Rights Reserved 粵公網(wǎng)安備 44030702000589號(hào)

    粵ICP備16078936號(hào)

    微信

    關(guān)注
    微信

    微信二維碼

    WAP二維碼

    客服

    聯(lián)系
    客服

    聯(lián)系客服:

    在線QQ: 303377504

    客服電話: 020-82301567

    E_mail郵箱: weilaitui@qq.com

    微信公眾號(hào): weishitui

    客服001 客服002 客服003

    工作時(shí)間:

    周一至周五: 09:00 - 18:00

    反饋

    用戶
    反饋

    欧美亚洲自拍偷拍_日本一区视频在线观看_国产二区在线播放_亚洲男人第一天堂

          9000px;">

                99精品欧美一区二区三区小说| 欧洲视频一区二区| 欧美丝袜自拍制服另类| 亚洲精品中文字幕乱码三区| www.成人网.com| 亚洲欧美韩国综合色| 欧美精选一区二区| 狠狠色2019综合网| 亚洲欧美自拍偷拍| 欧美电影在哪看比较好| 国产综合成人久久大片91| 中文字幕日韩精品一区| 91麻豆精品国产91久久久更新时间 | 91久久线看在观草草青青| 偷拍自拍另类欧美| 中文字幕乱码日本亚洲一区二区 | 精彩视频一区二区| 日韩一区中文字幕| 精品久久一区二区| 欧美伊人久久久久久午夜久久久久| 热久久免费视频| 欧美国产成人在线| 欧美一区二区国产| 色视频一区二区| 成人午夜视频福利| 久久电影国产免费久久电影| 亚洲一区二区在线免费观看视频 | 欧美视频日韩视频| av资源网一区| 国产一区999| 免费成人美女在线观看.| 亚洲欧美经典视频| 日本一二三不卡| 26uuu国产在线精品一区二区| 欧美日韩精品欧美日韩精品一| 国产99久久久精品| 精品综合免费视频观看| 天使萌一区二区三区免费观看| 亚洲欧美国产毛片在线| 中文字幕中文字幕中文字幕亚洲无线| 精品国免费一区二区三区| 欧美丰满少妇xxxxx高潮对白| 91九色02白丝porn| 在线看日韩精品电影| 91在线高清观看| 91一区在线观看| 一本色道久久综合亚洲aⅴ蜜桃| 大胆亚洲人体视频| 不卡欧美aaaaa| 成人性生交大片| 波多野结衣的一区二区三区| 国产aⅴ综合色| 99久久er热在这里只有精品15| 国产乱码精品一区二区三区av| 久久精品国产久精国产| 加勒比av一区二区| 东方aⅴ免费观看久久av| 粉嫩av亚洲一区二区图片| 成人免费高清视频| av亚洲精华国产精华| 91视视频在线观看入口直接观看www| 99久久er热在这里只有精品15| 91免费看`日韩一区二区| 色综合久久综合中文综合网| 色婷婷精品大视频在线蜜桃视频| 色哟哟一区二区在线观看| 在线观看区一区二| 日韩欧美中文一区| 国产视频一区在线播放| 亚洲丝袜精品丝袜在线| 亚洲18色成人| 国产精品亚洲午夜一区二区三区| 99re在线视频这里只有精品| 欧美三级韩国三级日本一级| 91精品国产丝袜白色高跟鞋| 国产欧美日本一区视频| 一二三区精品福利视频| 日本美女一区二区三区| 成人美女视频在线观看18| 欧美日韩久久一区| 欧美国产丝袜视频| 日韩精品国产精品| 成人va在线观看| 51午夜精品国产| 中文字幕一区二区5566日韩| 日韩av一二三| 99久久国产综合精品麻豆| 日韩欧美三级在线| 亚洲美女免费在线| 经典三级视频一区| 欧美人与禽zozo性伦| 国产精品素人视频| 久久成人免费网| 欧美午夜精品理论片a级按摩| 久久精品视频在线免费观看 | 国产精品久久久久久久久久久免费看| 一区二区免费在线播放| 精品午夜一区二区三区在线观看 | 日韩一二三四区| 亚洲一区二区三区四区五区黄| 国产美女精品一区二区三区| 欧美日韩国产大片| 亚洲精品国产视频| 成人免费视频网站在线观看| 欧美一区二区三区四区视频| 国产精品毛片久久久久久久| 激情久久五月天| 717成人午夜免费福利电影| 18成人在线视频| 成人黄色电影在线| 国产人久久人人人人爽| 毛片av中文字幕一区二区| 在线中文字幕不卡| 国产精品成人网| 99视频在线精品| 国产精品久久午夜| 高清不卡在线观看av| 精品国产乱码久久久久久闺蜜| 亚洲成av人影院| 欧洲一区在线观看| 亚洲国产欧美日韩另类综合 | 一区二区三区在线免费观看| 99精品视频在线观看| 欧美国产欧美综合| 99久久99精品久久久久久| 国产精品夫妻自拍| 99热99精品| 亚洲精品成a人| 欧美曰成人黄网| 亚洲人成亚洲人成在线观看图片 | a美女胸又www黄视频久久| 国产三级精品在线| 国产不卡在线一区| 国产精品久久久久久久久免费樱桃| 丁香亚洲综合激情啪啪综合| 亚洲三级电影全部在线观看高清| jizzjizzjizz欧美| 亚洲一区av在线| 日韩亚洲欧美成人一区| 国产一区二区三区在线看麻豆| 国产欧美日韩在线| 欧洲国内综合视频| 蜜桃久久精品一区二区| 久久久久久久久久久黄色 | 99re成人精品视频| 午夜久久电影网| 精品国产一区二区三区久久影院| 丁香婷婷综合五月| 亚洲综合免费观看高清完整版在线| 69精品人人人人| 国产成人日日夜夜| 亚洲综合色网站| 久久精品亚洲精品国产欧美| 91在线看国产| 日本视频中文字幕一区二区三区| 久久久噜噜噜久噜久久综合| 色呦呦一区二区三区| 国产一区二区在线免费观看| 一区二区在线观看视频在线观看| 日韩午夜av一区| 色综合网色综合| 久草在线在线精品观看| 综合久久综合久久| wwww国产精品欧美| 欧美日韩成人高清| 不卡av免费在线观看| 蜜臀国产一区二区三区在线播放 | 视频一区中文字幕| 综合在线观看色| 久久亚洲一级片| 在线播放日韩导航| 91久久香蕉国产日韩欧美9色| 狠狠狠色丁香婷婷综合久久五月| 亚洲美女屁股眼交3| 国产亚洲成av人在线观看导航| 欧美日韩一区二区三区视频| 成人性生交大片免费看中文| 蜜臂av日日欢夜夜爽一区| 亚洲综合精品自拍| 国产精品美女久久久久久久久| 精品美女在线播放| 欧美丰满少妇xxxbbb| 欧美色视频在线| 色综合久久九月婷婷色综合| 国产成人精品三级麻豆| 日韩av电影免费观看高清完整版| 亚洲精品v日韩精品| 自拍偷拍国产精品| 国产女人水真多18毛片18精品视频 | 午夜精品一区二区三区三上悠亚| 亚洲欧美综合另类在线卡通| 中文幕一区二区三区久久蜜桃| 欧美草草影院在线视频| 91精品麻豆日日躁夜夜躁| 91福利精品第一导航| 在线免费观看日韩欧美| 在线国产电影不卡| 欧美在线综合视频| 欧美日韩一二区| 69p69国产精品|