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

}
相关推荐
linmoo19863 天前
Java踩坑系列之二:ThreadLocal内存泄漏
java·内存泄漏·threadlocal·踩坑
tongluowan00710 天前
ThreadLocal底层原理 - 大白话+学术版解释
java·多线程·threadlocal
阿维的博客日记18 天前
ThreadLocal 是干什么的吗?它核心解决什么问题?
threadlocal
阿维的博客日记18 天前
ThreadLocal里面存了什么东西,那个泛型,就是Thread里面ThreadLocalMap里面ThreadLocal对应的Value了是吗?
threadlocal
最后一支迷迭香22 天前
Redis+ThreadLocal实现防重复提交,参考美团GTIS防重系统
redis·threadlocal·防止重复提交
lee_curry1 个月前
线程中断,等待,唤醒与ThreadLocal
java·线程·juc·threadlocal·中断
__土块__2 个月前
Java 大厂一面模拟:从线程本地存储到分库分表路由的连环拷问
kafka·线程池·分库分表·java面试·threadlocal·缓存一致性·大厂一面
__土块__2 个月前
一次 Spring 事务传播机制源码走读:从误用 @Transactional 到理解嵌套事务的边界
spring·threadlocal·编程式事务·@transactional·事务传播·源码走读·requires_new
敲代码的嘎仔2 个月前
Java后端开发——多线程面试题
java·开发语言·面试·多线程·八股·threadlocal·
庞轩px2 个月前
ThreadLocal 源码分析与内存泄漏问题
java·jvm·线程·threadlocal·内存泄露·key-value