一文了解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方法移除值。

相关推荐
苦学编程的谢3 分钟前
Mybatis_4
java·spring boot·tomcat·mybatis·mybatis_plus
她说..13 分钟前
MybatisPlus-快速入门
java·spring boot·spring cloud·微服务·mybatis·mybatisplus
哈密瓜刨冰19 分钟前
HTTP 协议的基本格式和 fiddler 的用法
java
hweiyu0020 分钟前
R语言简介(附电子书资料)
开发语言·r语言
hweiyu0022 分钟前
R语言常用扩展包
开发语言·r语言
砖头拍死你39 分钟前
51单片机如何使用printf打印unsigned long的那些事
java·前端·51单片机
拳里剑气1 小时前
C语言:顺序表(上)
c语言·开发语言·数据结构·学习方法
架构师沉默1 小时前
让我们一起用 DDD,构建更美好的软件世界!
java·后端·架构
胖头鱼不吃鱼-1 小时前
Go 原理之 GMP 并发调度模型
java·jvm·golang
王者鳜錸1 小时前
PYTHON从入门到实践-15数据可视化
开发语言·python·信息可视化