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

相关推荐
赵星星5204 分钟前
MySQL的默认隔离级别:为什么是可重复读(RR)而非读已提交(RC)?
java
用户2018792831675 分钟前
故事:公司的 "私人储物柜" 系统(ThreadLocalMap)
android·java
℃CCCC12 分钟前
请求库-axios
开发语言·华为·网络请求·harmonyos·deveco studio·axios请求·arkts编程
ling__i18 分钟前
java day18
java·开发语言
矛取矛求18 分钟前
日期类的实现
开发语言·c++·算法
非ban必选19 分钟前
netty-scoket.io路径配置
java·服务器·前端
大翻哥哥29 分钟前
Python 2025:AI工程化与智能代理开发实战
开发语言·人工智能·python
在下雨5991 小时前
项目讲解1
开发语言·数据结构·c++·算法·单例模式
再努力"亿"点点1 小时前
Sklearn(机器学习)实战:鸢尾花数据集处理技巧
开发语言·python
渣哥1 小时前
我和Java 8 Stream相爱相杀的那些年
java