Java ThreadLocal介紹

內(nèi)部實現(xiàn)

ThreadLocal底層是通過ThreadLocalMap內(nèi)部類來實現(xiàn)的,每個Thread內(nèi)部都有一個ThreadLocalMap對象。ThreadLocalMap內(nèi)部里面有一個Entry數(shù)組,Entry的key是ThreadLocal的弱引用,value為我們設(shè)置的值。

hash沖突解決方式

開放尋址法,線性探查。

擴容條件

元素個數(shù)大于數(shù)組長度的2/3。

如何避免內(nèi)存泄漏

每次使用完成之后需要調(diào)用remove方法清除,來避免內(nèi)存泄露。

如果使用完之后沒有調(diào)用remove方法,由于Thread強引用了ThreadLocalMap,ThreadLocalMap強引用Entry,Entry強引用value。如果ThreadLocal沒有外部強引用(方法執(zhí)行結(jié)束之后,線程棧不在引用ThreadLocal),由于Entry的key是弱引用,gc的時候就會被回收,回收之后Entry的key就會為null,但是value需要等待Thread線程退出之后才會被回收。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容