Java ThreadLocal介紹

內部實現

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

hash沖突解決方式

開放尋址法,線性探查。

擴容條件

元素個數大于數組長度的2/3。

如何避免內存泄漏

每次使用完成之后需要調用remove方法清除,來避免內存泄露。

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

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

推薦閱讀更多精彩內容