一文了解ThreadLocal

什么是ThreadLocal?

ThreadLocal是每个线程私有的,线程可以把自己的私有数据放到ThreadLocal里面,不用担心其他线程访问到自己ThreadLocal。

通过set()方法将值存入ThreadLocal或者修改值,get()方法取出值,remove()方法移除值。

ThreadLocal原理

ThreadLocal类中有一个内部类ThreadLocalMap,它其实就是一个哈希表,当我们往ThreadLocal里面存数据的时候,会通过当前线程得到ThreadLocalMap,以当前ThreadLocal为key,我们set的值为value,存入到ThreadLocalMap这个哈希表中。

如果我们在当前线程定义了多个ThreadLocal,他会存放到唯一的ThreadLocalMap中。

ThreadLocal内存泄露问题

我们知道往ThreadLocal里存放数据时,会存放到ThreadLocalMap中,key是ThreadLocal,value是我们设置的值。但是存放key的时候,不是直接存放的ThreadLocal对象本身,而是存放ThreadLocal的一个弱引用,而value是存放的强引用。在GC时,弱引用被垃圾回收器检查到就会直接回收,而如果线程一直存活的话,这个value也就一直还存在。

避免方法就是在使用完了ThreadLocal之后,一定要用remove方法移除值。

相关推荐
yue008几秒前
C# 项目06-计算程序运行时间
开发语言·c#·项目案例·断电保持
big凉笙墨染2 分钟前
《Java反序列化漏洞:从readObject到安全风险全解析》
java·安全·黑客
哥谭居民00012 分钟前
七天免登录 为什么不能用seesion,客户端的http请求自动携带cookei的机制(比较重要)涉及HTTP规范
java·http·tomcat
ling__wx16 分钟前
如何解决微服务调用链性能问题(优化 JVM 配置,降低 Full GC 频率)
java·jvm·full gc
Blockchina17 分钟前
第十二章 | Solidity 智能合约前后端集成实战
java·python·区块链·智能合约·solidity
江沉晚呤时20 分钟前
深入解析组合模式(Composite Pattern):概念、结构与应用
java·开发语言·后端·c#·.netcore
zh_xuan27 分钟前
leeCode 70. 爬楼梯
c语言·开发语言·数据结构·算法
拓端研究室TRL40 分钟前
专题|Python贝叶斯网络BN动态推理因果建模:MLE/Bayes、有向无环图DAG可视化分析呼吸疾病、汽车效能数据2实例合集
开发语言·python·汽车
努力的搬砖人.43 分钟前
Hadoop相关面试题
java·hadoop·面试
奋进的小暄1 小时前
贪心算法(10)(java)跳跃游戏
java·游戏·贪心算法