天天看点

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就会被回收