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进行回收

相关推荐
Flittly2 小时前
【AgentScope Java新手村系列】(16)从RAG到多路检索
java·spring boot·spring
小兔崽子去哪了3 小时前
Java 生成二维码解决方案
java·后端
人活一口气7 小时前
从JVM调优到MCP协议:Java全栈技术体系深度总结与企业级架构实践
java·spring boot
NE_STOP9 小时前
Vibe Coding -- 完整项目案例实操
java
荣码9 小时前
GraphRAG:普通RAG只能回答"点"的问题,我踩了4个坑才搞懂
java·python
SimonKing9 小时前
Google第三方授权登录
java·后端·程序员
明月光8189 小时前
从一行 @Builder 说起:重新拾起 Java 的 Lombok、注解与 Builder 模式
java
考虑考虑18 小时前
Mybatis实现批量插入
java·后端·mybatis
咖啡八杯19 小时前
GoF设计模式——中介者模式
java·后端·spring·设计模式
青石路1 天前
记一次多JDK版本问题的排查,一坑套一坑,差点没爬上来
java