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

相关推荐
道法自然|~19 分钟前
【PHP】简单的脚本/扫描器拦截与重要文件保护
开发语言·爬虫·php
GoWjw31 分钟前
在C&C++中结构体的惯用方法
c语言·开发语言·c++
静心观复35 分钟前
Java 中,`1 << 1`
java·开发语言
爱睡觉的王宇昊44 分钟前
单体架构详细解析:从概念到实践--购物网站搭建
java·spring boot·架构·团队开发·个人开发·敏捷流程
Bruce_kaizy1 小时前
c++单调数据结构————单调栈,单调队列
开发语言·数据结构·c++
不思念一个荒废的名字1 小时前
【黑马JavaWeb+AI知识梳理】Web后端开发04-登录认证
java·后端
阿坤带你走近大数据1 小时前
Python基础知识-数据结构篇
开发语言·数据结构·python
froginwe111 小时前
AJAX 实时搜索:技术原理与实现方法
开发语言
发光小北1 小时前
SG-CAN (FD) NET-210(双通道 CAN (FD) 转以太网网关)特点与功能介绍
开发语言·网络·php
java1234_小锋1 小时前
Redis到底支不支持事务啊?
java·数据库·redis