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