那為什么使用弱引用而不是強引用??
我們看看Key使用的
key 使用強引用
當hreadLocalMap的key為強引用回收ThreadLocal時,因為ThreadLocalMap還持有ThreadLocal的強引用,如果沒有手動刪除,ThreadLocal不會被回收,導致Entry內存泄漏。 譬如 設置:ThreadLocal=null 以后,應該會被回收的,但實際情況是ThreadLocalMap還有一個強引用,導致無法回收
key 使用弱引用
當ThreadLocalMap的key為弱引用回收ThreadLocal時,由於ThreadLocalMap持有ThreadLocal的弱引用,即使沒有手動刪除,ThreadLocal也會被回收。當key為null,在下一次ThreadLocalMap調用set(),get(),remove()方法的時候會被清除value值。
譬如 設置:ThreadLocal=null 以后,強引用已沒有,ThreadLocalMap還有一個弱引用,下次GC就會被回收