一、key是弱引用,gc垃圾回收时会影响ThreadLocal正常工作吗
到这里,有些小伙伴可能有疑问,
ThreadLocalMap的key既然是 弱引用,那么GC时会不会贸然地把key回收掉,进而影响ThreadLocal的正常使用呢?答案是不会影响ThreadLocal的正常工作的。原因如下,虽然ThreadLocalMap的Entry的key是一个弱引用(key为ThreadLocal),但是栈中还有ThreadLocal ref在引用着ThreadLocal,如下所示:
 
 
二、代码证明
/**
 * @Author : 一叶浮萍归大海
 * @Date: 2023/11/22 14:36
 * @Description: 证明gc时不会回收ThreadLocalMap的弱引用(除非手动将变量设置为null)
 */
public class ThreadLocalWeaknessMainApp {
    public static void main(String[] args) {
        Object obj = new Object();
        WeakReference<Object> weakReference = new WeakReference<>(obj);
        System.out.println("GC回收之前:" + weakReference.get());
        System.gc();
        System.out.println("GC回收之后:" + weakReference.get());
        obj = null;
        System.gc();
        System.out.println("对象设置为null,GC回收之后:" + weakReference.get());
    }
}



















