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

相关推荐
daixin88481 小时前
cursor无法正常使用gpt5.5等模型解决方案
java·redis·cursor
韦禾水2 小时前
记录一次项目部署到tomcat的异常
java·tomcat
曦月合一2 小时前
树莓派安装jdk、tomcat、vnc、谷歌浏览器开机自启等环境配置
java·tomcat·树莓派
此剑之势丶愈斩愈烈3 小时前
openssl 自建证书
java
面汤放盐3 小时前
何时使用以及何时不应使用微服务:没有银弹
java·运维·云计算
0xDevNull3 小时前
Spring Boot 自动装配:从原理到实践
java·spring boot·后端
qq_589568104 小时前
java学习笔记,包括idea快捷键
java·ide·intellij-idea
小怪吴吴5 小时前
idea 开发Android
android·java·intellij-idea
嘻嘻哈哈樱桃5 小时前
牛客经典101题题解集--动态规划
java·数据结构·python·算法·职场和发展·动态规划
一次旅行5 小时前
IDEA安装CC GUI新手指南
java·ide·intellij-idea