我可以理解在threadLocals这张map中的key是弱引用,如果没有强引用存在,key引用的内存会被回收,但有个地方不明白
为了能够使用到某个ThreadLocal对象threadLocalObj,外面肯定有个类中包含了这个static变量:
例如类A中有:public static ThreadLocal threadLocalObj = new ThreadLocal<>();
那么当类A加载的时候,就会new出这个ThreadLocal对象,且threadLocalObj指向这个对象的引用,这是个强引用。
当把这个对象set到threadLocals这个map中时:
A.threadLocalObj.set(Value);
此时在map中保存的Entry里,key虽然是指向这个ThreadLocal对象的弱引用,但是类A中的threadLocalObj作为static始终是存在的,而且类A中的threadLocalObj和Entry中的key都是指向这个ThreadLocal对象的引用,那我觉得既然有一个是强引用,这个ThreadLocal对象也就应该不会被回收呀。
登录后可查看更多问答,登录/注册