上图简单的描述了一下ThreadLocal内部,接下来简单读取一下源代码从而发现内存泄漏的问题
为什么要把Key作为弱引用呢?
ThreadLocal<Object> tl = new ThreadLocal<Object>();
tl.set("abc");
tl.remove();
若是用强引用,即使设置tl=null,但是key依然指向ThreadLocal对象,所以会有内存泄漏,弱引用不会
如果ThreadLocal对象被回收,会导致Key变为null,意味着永远访问不到key指定的value,所以还会产生内存泄漏的问题
因此在使用ThreadLocal的时候,如果一旦确认不再使用对象,要进行手动Threadlocal.remove()