1.構(gòu)造方法

2.公有方法



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


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


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



該方法用于給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()方法即可。