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

相关推荐
ttwuai11 分钟前
Cursor 生成 CRUD 后,Go 后台接口别只测 200:JWT、RBAC 和 tenant_id 怎么验
开发语言·后端·golang
维天说16 分钟前
CLI-Switch 2026年3月版历史设计:Hook、TTY 隔离与 JSON 状态
java·服务器·json
এ慕ོ冬℘゜21 分钟前
前端基础:什么是时间戳?JS获取时间戳三种方法与实战用途
开发语言·前端·javascript
执明wa27 分钟前
LayoutInflater详解: XML是如何变成View的?
android·xml·开发语言·android studio
Zane19941 小时前
并发 vs 并行:别再傻傻分不清了,一文讲透 Java 并发编程的第一课
java·后端
噢,我明白了2 小时前
java中Excel的导入和导出(EasyExcel)
java·开发语言·excel
吠品2 小时前
Zabbix Web界面误报Server未运行的排查与解决
java·服务器·数据库
啊湘2 小时前
天气查询API接口 按月Token鉴权 实时天气 物联网可用 文档齐全
java·后端·struts
mabing9932 小时前
Qt 生成条纹图
开发语言·qt
Java内核笔记2 小时前
告别十亿美元的错误 : Spring Boot 4 空安全 (JSpecify) 实战
java·spring boot·后端