ThreadLocal为什么不用强引用
那为什么使用弱引用而不是强引用??
我们看看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就会被回收