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

相关推荐
元亓亓亓16 分钟前
Java后端开发day46--多线程(二)
java·开发语言
七七小报21 分钟前
uniapp-商城-51-后台 商家信息(logo处理)
java·服务器·windows·uni-app
Kay_Liang23 分钟前
深入解析JavaScript变量作用域:var、let、const全攻略
开发语言·javascript·const·var
神奇小永哥25 分钟前
浅谈装饰模式
java
jiunian_cn32 分钟前
【c++】多态详解
java·开发语言·数据结构·c++·visual studio
萧鼎34 分钟前
深入探索 Python 的 QuTiP 5 库:量子计算与开放量子系统模拟的利器
开发语言·python·量子计算
炯哈哈38 分钟前
【上位机——MFC】对话框
开发语言·c++·mfc·上位机
yousuotu1 小时前
python如何提取Chrome中的保存的网站登录用户名密码?
java·chrome·python
Code哈哈笑1 小时前
【图书管理系统】深度讲解:图书列表展示的后端实现、高内聚低耦合的应用、前端代码讲解
java·前端·数据库·spring boot·后端
python算法(魔法师版)1 小时前
MATLAB安装常见问题及解决方案详解(含代码示例)
开发语言·matlab