系列八、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());
    }

}
相关推荐
岁岁岁平安5 天前
springboot实战学习(10)(ThreadLoacl优化获取用户详细信息接口)(重写拦截器afterCompletion()方法)
java·spring boot·后端·学习·threadlocal·jwt令牌
程序猿进阶1 个月前
ThreadLocal 释放的方式有哪些
java·开发语言·性能优化·架构·线程池·并发编程·threadlocal
栗筝i2 个月前
Java 并发编程:线程变量 ThreadLocal
threadlocal·栗筝i 的 java 技术栈·java 基础·java 并发·线程变量
少不入川。2 个月前
ThreadLocal源码分析
java·juc·threadlocal
_whitepure3 个月前
ThreadLocal详解
java多线程·threadlocal·threadlocal原理
Rcain_R5 个月前
JUC下的ThreadLocalRandom详解
java·后端·高并发·线程·juc·random·threadlocal
williamdsy5 个月前
【退役之重学Java】ThreadLocal
java·开发语言·threadlocal
大星星不见了6 个月前
Java-多线程-并发知识点03(面试/学习)
java·学习·面试·多线程·并发·threadlocal·aqs
大刀爱敲代码6 个月前
ThreadLocal的基本使用
java·线程·threadlocal
丁总学Java7 个月前
JDBC(数据库连接池,封装JDBCUtil,Apache的DBUtils,DTO,JDBC工具类事务问题,ThreadLocal)
数据库连接池·threadlocal·dto·封装jdbcutil·jdbc工具类事务问题