天天看點

ThreadLocal為什麼不用強引用

我們看看key使用的

當hreadlocalmap的key為強引用回收threadlocal時,因為threadlocalmap還持有threadlocal的強引用,如果沒有手動删除,threadlocal不會被回收,導緻entry記憶體洩漏。 譬如  設定:threadlocal=null  以後,應該會被回收的,但實際情況是threadlocalmap還有一個強引用,導緻無法回收

當threadlocalmap的key為弱引用回收threadlocal時,由于threadlocalmap持有threadlocal的弱引用,即使沒有手動删除,threadlocal也會被回收。當key為null,在下一次threadlocalmap調用set(),get(),remove()方法的時候會被清除value值。

譬如  設定:threadlocal=null  以後,強引用已沒有,threadlocalmap還有一個弱引用,下次gc就會被回收