內部實現
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線程退出之后才會被回收。