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

相关推荐
逸Y 仙X15 小时前
文章三:Elasticsearch 集群恢复和索引分布
java·大数据·linux·服务器·elasticsearch·搜索引擎·全文检索
奋斗的小乌龟1 天前
动态创建Agent02
java
ZFSS1 天前
Localization Translate API 集成与使用指南
java·服务器·数据库·人工智能·mysql·ai编程
摇滚侠1 天前
Java 零基础全套教程,集合框架,笔记 153-163
java·开发语言·笔记
nannan12321 天前
后端技术栈梳理
java
L、2181 天前
CANN算子开发调试实战:从“Segmentation Fault“到定位根因的完整流程
java·开发语言
索木木1 天前
NCCL SHARP 和 TREE算法
java·服务器·算法
NiceCloud喜云1 天前
Claude Files API 深入:从上传、复用到配额管理的工程化指南
android·java·数据库·人工智能·python·json·飞书
超梦dasgg1 天前
Java 生产环境 MQ 技术选型全解析
java·开发语言·java-rocketmq·java-rabbitmq
霸道流氓气质1 天前
Spring AI 多工具链式调用(Tool Chain)极简实战
java·人工智能·spring