ThreadLocal

1.構(gòu)造方法


無(wú)參構(gòu)造方法

2.公有方法


get()方法



get()源碼

? ? ? ? 當(dāng)線程初次調(diào)用set()或get()方法時(shí),當(dāng)前線程并沒(méi)有其特有的ThreadLocalMap,因而會(huì)調(diào)用creatMap( t , value )為當(dāng)前線程創(chuàng)建一個(gè)HashMap,該HashMap以其HashCode與當(dāng)前線程進(jìn)行綁定。并以ThreadLocal為鍵,value對(duì)象為值,其鍵值對(duì)采用WeakRefference(弱引用)。當(dāng)前線程結(jié)束后,且無(wú)其它強(qiáng)引用指向該value值,GC會(huì)將value對(duì)象進(jìn)行標(biāo)記,然后回收。

? ? ? ? 因此,當(dāng)用ThreadLocal進(jìn)行對(duì)諸如Connection,Session需要關(guān)閉以釋放資源的對(duì)象管理時(shí),將不需要手動(dòng)關(guān)閉。因?yàn)樵诰€程結(jié)束時(shí),該對(duì)象會(huì)被自動(dòng)回收。


initialValue()方法


initialValue()源碼

initialValue()可用于對(duì)ThreadLocal進(jìn)行初始的賦值??梢詣?chuàng)建類(lèi)繼承ThreadLocal類(lèi),并重寫(xiě)initialValue()即可對(duì)其進(jìn)行初始賦值。

set()方法


set()源碼

set()方法將該參數(shù)存入到當(dāng)前線程的ThreadLocalMap中,若該HashMap不存在則創(chuàng)建并進(jìn)行賦值。

remove()方法


remove()源碼

remove()方法會(huì)調(diào)用clear()方法,清除當(dāng)前線程的ThreadLocalMap的鍵值對(duì)的鍵與值之間的引用,由于該鍵值對(duì)的鍵與值之間是弱引用,因而該value值對(duì)象會(huì)被回收。


JDK8新增方法

withInitial()方法



withInitial()方法

該方法用于給ThreadLocal賦初始值,類(lèi)似initialValue()方法,不過(guò)有了這個(gè)方法之后就不再需要?jiǎng)?chuàng)建類(lèi)繼承ThreadLocal然后重寫(xiě)initialValue()方法。直接調(diào)用withInitialValue()方法,并用匿名內(nèi)部類(lèi)的形式傳入withInitialvalue()中,重寫(xiě)initialvalue()方法即可。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容