系列八、key是弱引用,gc垃圾回收时会影响ThreadLocal正常工作吗

一、key是弱引用,gc垃圾回收时会影响ThreadLocal正常工作吗

到这里,有些小伙伴可能有疑问,ThreadLocalMap的key既然是 弱引用, 那么GC时会不会贸然地把key回收掉,进而影响ThreadLocal的正常使用呢?答案是不会影响ThreadLocal的正常工作的。原因如下,虽然ThreadLocalMap的Entry的key是一个弱引用(key为ThreadLocal),但是栈中还有ThreadLocal ref在引用着ThreadLocal,如下所示:

二、代码证明

java 复制代码
/**
 * @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());
    }

}
相关推荐
庞轩px1 天前
ThreadLocal 源码分析与内存泄漏问题
java·jvm·线程·threadlocal·内存泄露·key-value
景川呀3 天前
ThreadLocal源码解析
threadlocal
qq_2320455712 天前
精积微半导体面试(部分)
netty·策略模式·nio·内存抖动·threadlocal·bitmap·复用
无心水14 天前
【常见错误】1、Java并发工具类四大坑:从ThreadLocal到ConcurrentHashMap,你踩过几个?
java·开发语言·后端·架构·threadlocal·concurrent·java并发四大坑
weisian1511 个月前
JVM--13-深入ThreadLocal:线程私有数据的隔离艺术与实战陷阱
开发语言·jvm·threadlocal
C雨后彩虹1 个月前
ThreadLocal全面总结,从理论到实践再到面试高频题
java·面试·多线程·同步·异步·threadlocal
C雨后彩虹1 个月前
跨线程数据传递InheritableThreadLocal的原理
java·多线程·同步·异步·threadlocal
专业的小学生2 个月前
单线程缓存
缓存·线程·thread·threadlocal
袁慎建@ThoughtWorks2 个月前
ThreadLocal那些事儿
java·jdk·多线程·threadlocal
zfj3213 个月前
从源码层面解析一下ThreadLocal的工作原理
java·开发语言·threadlocal