欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

如何理解ThreadLocal的Entry繼承WeakReference

這篇文章主要介紹“如何理解ThreadLocal的Entry繼承WeakReference”,在日常操作中,相信很多人在如何理解ThreadLocal的Entry繼承WeakReference問題上存在疑惑,小編查閱了各式資料,整理出簡(jiǎn)單好用的操作方法,希望對(duì)大家解答”如何理解ThreadLocal的Entry繼承WeakReference”的疑惑有所幫助!接下來,請(qǐng)跟著小編一起來學(xué)習(xí)吧!

創(chuàng)新互聯(lián)公司專業(yè)為企業(yè)提供隆德網(wǎng)站建設(shè)、隆德做網(wǎng)站、隆德網(wǎng)站設(shè)計(jì)、隆德網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計(jì)與制作、隆德企業(yè)網(wǎng)站模板建站服務(wù),十多年隆德做網(wǎng)站經(jīng)驗(yàn),不只是建網(wǎng)站,更提供有價(jià)值的思路和整體網(wǎng)絡(luò)服務(wù)。

導(dǎo)讀:ThreadLocal的Entry為什么要繼承WeakReference?弱引用GC的時(shí)候會(huì)回收?那么回收了,數(shù)據(jù)不會(huì)丟失嗎?

如何理解ThreadLocal的Entry繼承WeakReference

如何理解ThreadLocal的Entry繼承WeakReference

首先得看一眼WeakReference的代碼,它繼承自Reference,這里有個(gè)get()方法,代碼如下:

如何理解ThreadLocal的Entry繼承WeakReference

注意這一句:

If this reference object has been cleared, either by the program or by the garbage collector, then this method returns null.

也就是說,referent這個(gè)字段會(huì)在GC時(shí)被修改,而它經(jīng)過GC后會(huì)變成null。

再看問題中說的這個(gè)Entry,代碼在這里:

如何理解ThreadLocal的Entry繼承WeakReference

注意這一句:

Note that null keys (i.e. entry.get() == null) mean that the key is no longer referenced, so the entry can be expunged from table.

這時(shí)得注意一件事,剛才提到ThreadLocal被GC后Entry中的reference就會(huì)變?yōu)?code>null,但是呢, Entry畢竟也是個(gè)對(duì)象,它除了會(huì)在GC時(shí)被改一下reference以外平平無奇,那么這里的value啥時(shí)候銷毀呢?

反正不會(huì)隨著ThreadLocal一起被刪就對(duì)了,甚至它能不能被銷毀都是個(gè)問題。GC線程是不可能在改reference時(shí)順便改value的,所以這個(gè)value只能是被咱自己刪。

那么就來看看ThreadLocal僅有的三個(gè)public的實(shí)例成員方法,也就是getset、remove,它們?nèi)齻€(gè)方法最后實(shí)際上會(huì)調(diào)用ThreadLocalMapgetEntry、set、remove這三個(gè)方法。

如何理解ThreadLocal的Entry繼承WeakReference

如何理解ThreadLocal的Entry繼承WeakReference

如何理解ThreadLocal的Entry繼承WeakReference

getEntry有可能通過getEntryAfterMiss調(diào)到expungeStaleEntry;set有可能調(diào)到replaceStaleEntry也有可能通過cleanSomeSlots調(diào)到expungeStaleEntry也有可能通過rehash調(diào)到expungeStaleEntries再調(diào)到expungeStaleEntry也有可能通過replaceStaleEntry調(diào)到cleanSomeSlotsexpungeStaleEntry;而remove也會(huì)調(diào)到expungeStaleEntry。

總之,條條大路通羅馬,最后十有八九會(huì)跑到expungeStaleEntry里頭,而實(shí)際上這件事人家作者寫注釋的時(shí)候其實(shí)早就提醒過咱們了:

Note that null keys (i.e. entry.get() == null) mean that the key is no longer referenced, so the entry can be expunged from table.Such entries are referred to as "stale entries" in the code that follows.

如何理解ThreadLocal的Entry繼承WeakReference

expungeStaleEntry的實(shí)現(xiàn)

如何理解ThreadLocal的Entry繼承WeakReference

Entryvalue就是在這里被設(shè)置為null的,ThreadLocalMap中的table中的Entry也是在這里被設(shè)置為null的。

那么弱引用的作用是什么呢,只要去 ThreadLocal的源碼搜一下== null就能發(fā)現(xiàn)它出現(xiàn)的每一處都是在對(duì)reference作判斷,這代碼里就是通過判斷reference來判斷Entry還有用沒用的,最需要被GC的就是Entry中的value,而ThreadLocal本身是很小的,它里面只有一個(gè)threadLocalHashCode而已

到此,關(guān)于“如何理解ThreadLocal的Entry繼承WeakReference”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)砀鄬?shí)用的文章!

網(wǎng)頁題目:如何理解ThreadLocal的Entry繼承WeakReference
標(biāo)題路徑:http://chinadenli.net/article32/pijcsc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供響應(yīng)式網(wǎng)站、品牌網(wǎng)站建設(shè)、網(wǎng)站設(shè)計(jì)公司、微信公眾號(hào)、軟件開發(fā)、定制網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站優(yōu)化排名