日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

面试官:不使用synchronized和lock,如何实现一个线程安全的单例?

發(fā)布時間:2025/3/21 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 面试官:不使用synchronized和lock,如何实现一个线程安全的单例? 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

單例,大家肯定都不陌生,這是Java中很重要的一個設(shè)計模式。稍微了解一點單例的朋友也都知道實現(xiàn)單例是要考慮并發(fā)問題的,一般情況下,我們都會使用synchronized來保證線程安全。

那么,如果有這樣一道面試題:不使用synchronized和lock,如何實現(xiàn)一個線程安全的單例? 你該如何回答?

C類應(yīng)聘者:可以使用餓漢模式實現(xiàn)單例。如:

public?class?Singleton?{?private?static?Singleton instance =?new?Singleton();private?Singleton?(){}public?static?Singleton?getInstance()?{return?instance;} }

還有部分程序員可以想到餓漢的變種:

public?class?Singleton?{private?Singleton instance =?null;static?{instance =?new?Singleton();}private?Singleton?(){}public?static?Singleton?getInstance()?{return?this.instance;}}

使用static來定義靜態(tài)成員變量或靜態(tài)代碼,借助Class的類加載機制實現(xiàn)線程安全單例。

面試官:除了這種以外,還有其他方式嗎?

B類應(yīng)聘者:

除了以上兩種方式,還有一種辦法,就是通過靜態(tài)內(nèi)部類來實現(xiàn),代碼如下:

public?class?Singleton?{private?static?class?SingletonHolder?{private static final Singleton INSTANCE = new Singleton();}private Singleton (){}public static final Singleton getInstance() {return SingletonHolder.INSTANCE;}}

這種方式相比前面兩種有所優(yōu)化,就是使用了lazy-loading。Singleton類被裝載了,但是instance并沒有立即初始化。因為SingletonHolder類沒有被主動使用,只有顯示通過調(diào)用getInstance方法時,才會顯示裝載SingletonHolder類,從而實例化instance。

面試官:除了這種以外,還有其他方式嗎?

A類應(yīng)聘者:

除了以上方式,還可以使用枚舉的方式,如:

public?enum?Singleton {INSTANCE;public?void?whateverMethod()?{}}

這種方式是Effective Java作者Josh Bloch 提倡的方式,它不僅能避免多線程同步問題,而且還能防止反序列化重新創(chuàng)建新的對象,可謂是很堅強的壁壘。

面試官:以上幾種答案,其實現(xiàn)原理都是利用借助了類加載的時候初始化單例。即借助了ClassLoader的線程安全機制。

所謂ClassLoader的線程安全機制,就是ClassLoader的loadClass方法在加載類的時候使用了synchronized關(guān)鍵字。也正是因為這樣, 除非被重寫,這個方法默認(rèn)在整個裝載過程中都是同步的,也就是保證了線程安全。

所以,以上各種方法,雖然并沒有顯示的使用synchronized,但是還是其底層實現(xiàn)原理還是用到了synchronized。

面試官:除了這種以外,還有其他方式嗎?

A類應(yīng)聘者:

還可以使用Java并發(fā)包中的Lock實現(xiàn)

面試官:本質(zhì)上還是在使用鎖,不使用鎖的話,有辦法實現(xiàn)線程安全的單例嗎?

A+類面試者:

有的,那就是使用CAS。

CAS是項樂觀鎖技術(shù),當(dāng)多個線程嘗試使用CAS同時更新同一個變量時,只有其中一個線程能更新變量的值,而其它線程都失敗,失敗的線程并不會被掛起,而是被告知這次競爭中失敗,并可以再次嘗試。實現(xiàn)單例的方式如下:

public?class?Singleton?{private?static?final AtomicReference<Singleton> INSTANCE =?new?AtomicReference<Singleton>();private?Singleton()?{}public?static?Singleton?getInstance()?{for?(;;) {Singleton singleton = INSTANCE.get();if?(null?!= singleton) {return?singleton;}singleton =?new?Singleton();if?(INSTANCE.compareAndSet(null, singleton)) {return?singleton;}}} }

面試官:這種方式實現(xiàn)的單例有啥優(yōu)缺點嗎?

A++類面試者:

用CAS的好處在于不需要使用傳統(tǒng)的鎖機制來保證線程安全,CAS是一種基于忙等待的算法,依賴底層硬件的實現(xiàn),相對于鎖它沒有線程切換和阻塞的額外消耗,可以支持較大的并行度。

CAS的一個重要缺點在于如果忙等待一直執(zhí)行不成功(一直在死循環(huán)中),會對CPU造成較大的執(zhí)行開銷。

另外,如果N個線程同時執(zhí)行到singleton = new Singleton();的時候,會有大量對象創(chuàng)建,很可能導(dǎo)致內(nèi)存溢出。

面試官:你被錄取了!

《新程序員》:云原生和全面數(shù)字化實踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀

總結(jié)

以上是生活随笔為你收集整理的面试官:不使用synchronized和lock,如何实现一个线程安全的单例?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 国产无遮无挡120秒 欧美综合图片 | 综合网中文字幕 | 欧美在线观看视频 | 国产激情成人 | 视频区图片区小说区 | 久久国产精品网站 | 在线黄视频 | 性欧美成人播放77777 | 日本泡妞xxxx免费视频软件 | 911国产视频 | 一本加勒比波多野结衣 | 午夜男人影院 | 法国性xxxx精品hd | 午夜毛片视频 | 精品国产av一区二区三区 | 他揉捏她两乳不停呻吟动态图 | aaa在线视频 | 国产精品情侣呻吟对白视频 | av拍拍拍 | 一本大道东京热无码aⅴ | 五月天青青草 | 黄色特一级 | 久久久久久av无码免费网站 | 手机看片日韩在线 | 在线午夜视频 | 五月婷av| 国产二区自拍 | 日韩精品视频中文字幕 | 久久男人天堂 | 欧美一区二区三区公司 | 丰满肉肉bbwwbbww | 老地方在线观看免费动漫 | 精品小视频 | www.在线观看麻豆 | 黄色尤物视频 | 国产一区二区在线播放 | 老女人毛片50一60岁 | av毛片在线免费观看 | 国产麻豆免费视频 | 亚洲美女影院 | 一区二区久久久 | 全部免费毛片在线播放 | 国产午夜一级片 | 日韩中文字幕电影 | 黄色av免费 | 精品国产一区二区三区性色 | 国产伦精品一区二区三 | 五月婷视频 | 日本边添边摸边做边爱 | 国产精品久久久久久免费观看 | 亚洲av无码乱码国产精品fc2 | 夏目彩春娇喘呻吟高潮迭起 | 亚洲AV无码成人精品区先锋 | 国产无套粉嫩白浆内谢 | 日本亚洲欧美 | 国产熟女一区二区三区五月婷 | 窝窝视频在线观看 | 亚久久| 久久咪咪 | 潮喷失禁大喷水aⅴ无码 | 国产精品99久久久久久宅男 | 久久黄色| 亚洲色图影院 | 乡村性满足hd | 国产日韩精品在线观看 | 亚洲免费一级片 | 亚洲国产中文字幕在线 | 亚洲精品男女 | 一二三四av | 久久综合加勒比 | 欧美日韩欧美日韩在线观看视频 | 亚洲一级色 | 草草在线视频 | 亚洲欧美国产一区二区 | 亚洲一线在线观看 | 成人日韩精品 | 男人都懂的网站 | 日本激情视频一区二区三区 | 18禁一区二区三区 | 久久婷婷国产麻豆91天堂 | 中文文字幕文字幕高清 | 精品成人18| 91极品视觉盛宴 | 欧美在线观看视频一区二区 | 久久久久久久女国产乱让韩 | 国产成人精品亚洲精品色欲 | 波多野结衣在线观看一区二区 | 免费一级全黄少妇性色生活片 | 亚洲精品国产精华液 | 4438亚洲最大 | 亚洲成av人在线观看 | 欧美日韩久久精品 | 国产在线一卡二卡 | 精品国产一区二区三区日日嗨 | 亚洲一区二区av在线 | 久久99热这里只频精品6学生 | 久久乐av | 亚洲永久免费网站 | 在线观看日韩一区二区 |