ThreadLocal存储数据是使用ThreadLocalMap来存的,ThreadLocalMap基于Entry[]实现,存储数据时,本身ThreadLocal作为key来存取value数据。
key内存泄露:
ThreadLocal对象本事就是一个强引用,当方法弹栈后,因为线程池中线程还在,对ThreadLocal引用的Key还在,这会导致这个ThreadLocal无法被回收。
为了解决这个key不能被回收导致的内存泄露问题,key是对ThreadLocal为弱引用。
value的内存泄露问题:
因为key弱引用被回收了,获取不到value,造成了value在内存中但找不到的内存泄露问题
解决:当使用完ThreadLocal后,手动remove。