ThreadLocal相关问题

  1. 作用
    存储线程独有的变量数据
  2. 原理
    每个线程有一个ThreadLocalMap对象,该对象也是HashMap结构,key为ThreadLocal对象的WeakReference,value为具体存储的数据对象。ThreadLocal对象在set具体value对象时,实际上是往当前线程的ThreadLocalMap中put数据;而get数据时,也是在读当前线程的ThreadLocalMap。
  3. 内存泄漏风险
    ThreadLocal对象的业务生命周期结束后一定要调用remove方法,否则会因为ThreadLocalMap强引用了对应的value对象,而导致value对象无法被回收
  4. 为什么key是弱引用
    这是一个避免用户忘记调用remove方法的补救措施,jvm的垃圾回收策略针对弱引用在gc时立即回收,所以jvm一旦触发gc,ThreadLocalMap的key就一定会回收。

同时,还有一个兜底机制来补救value的回收,那就是每次get和set时都会针对key为null的entry进行回收

相关推荐
棉花骑士5 小时前
【AI Agent】面向 Java 工程师的Claude Code Harness 学习指南
java·开发语言
爱敲代码的小鱼5 小时前
springboot(2)从基础到项目创建:
java·spring boot·spring
迈巴赫车主6 小时前
蓝桥杯19724食堂
java·数据结构·算法·职场和发展·蓝桥杯
i220818 Faiz Ul7 小时前
动漫商城|基于springboot + vue动漫商城系统(源码+数据库+文档)
java·数据库·vue.js·spring boot·论文·毕设·动漫商城系统
海兰7 小时前
【实战】MCP 服务在 Nacos 中注册状态分析与优化
android·java·github·银行系统·银行ai
Makoto_Kimur8 小时前
Java 打印模板大全
java·开发语言·排序算法
程序员榴莲8 小时前
Java(十)super关键字
java·开发语言
HAPPY酷8 小时前
Python高级架构师之路——从原理到实战
java·python·算法
Boop_wu8 小时前
[Java 算法 ] 链表
java·算法·链表
ybwycx8 小时前
SpringBoot下获取resources目录下文件的常用方法
java·spring boot·后端