內(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沖突解決方式
開放尋址法旧巾,線性探查。
擴(kuò)容條件
元素個數(shù)大于數(shù)組長度的2/3忍些。
如何避免內(nèi)存泄漏
每次使用完成之后需要調(diào)用remove方法清除鲁猩,來避免內(nèi)存泄露。
如果使用完之后沒有調(diào)用remove方法罢坝,由于Thread強(qiáng)引用了ThreadLocalMap廓握,ThreadLocalMap強(qiáng)引用Entry,Entry強(qiáng)引用value。如果ThreadLocal沒有外部強(qiáng)引用(方法執(zhí)行結(jié)束之后隙券,線程棧不在引用ThreadLocal)戈钢,由于Entry的key是弱引用,gc的時候就會被回收是尔,回收之后Entry的key就會為null,但是value需要等待Thread線程退出之后才會被回收开仰。