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

相关推荐
啊唯不困2 小时前
AI智能应用开发(Java)起点-终点 -1、java的前世今生andJava环境配置、jdk下载,以及Idea下载和基本应用
java·开发语言·intellij-idea
_muffinman2 小时前
Java学习笔记-第2章 运算和语句
java·笔记·学习
荒夜长歌2 小时前
传统java行业跳槽面试汇总(后续会更新)
java·面试·跳槽
旷世奇才李先生2 小时前
065智慧农业专家远程指导系统-springboot+vue
java·vue.js·spring boot
大迪deblog2 小时前
系统架构设计-软件架构风格
java·开发语言·架构·软件构建
盐水冰2 小时前
【烘焙坊项目】后端搭建(10) - 地址簿功能&用户下单&微信支付
java·数据库·后端
重庆小透明2 小时前
【面试问题】java小厂
java·开发语言·面试
xindon123 小时前
如何集成单点登录和设计子系统的权限管理三
java
zuoerjinshu3 小时前
【SpringBoot】讲清楚日志文件&&lombok
java·spring boot·后端