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

相关推荐
龙虾PRO1 小时前
能源与股票量化核心差异,AI全链路落地实操手册
java·面试·职场和发展
llwszx1 小时前
【Java/Go后端手撸原生Agent(第九篇):Plan-and-Execute规划模式——从“走一步看一步“到“先谋后动“】
java·python·golang·agent开发·plan模式·规划执行模式
ZJH__GO2 小时前
网络编程v2--多客户端互通
java·运维·服务器·开发语言·计算机网络
霸道流氓气质2 小时前
SpringBoot中基于 AES-GCM + KMS 密钥管理的数据加解密 Starter 实践
java·数据库·spring boot
Gofarlic_OMS2 小时前
NX浮动许可调度黑名单机制,对比两款谁更合理
java·大数据·运维·开源·制造
乐观的Terry2 小时前
8、发布系统-完整流水线的核心
java·spring boot·spring·spring cloud
Alexalbb2 小时前
从角色过滤到可审计授权:单体系统数据权限设计复盘与演进
java
万亿少女的梦1683 小时前
基于Spring Boot的游戏交易管理系统设计与实现
java·spring boot·mysql·系统设计·交易管理
闲猫3 小时前
Agent工程实践:从WorkFlow到多Agent协作的落地笔记
java·服务器·前端
笨蛋不要掉眼泪3 小时前
Java虚拟机:常用参数
java·开发语言·python