ThreadLocal

1.每条线程都有一个ThreadLocalMap对象,而可以有多个threadlocal对象存放在map中。

2.放在map中的key是WeakReference<ThreadLocal<?>>,也就是ThreadLocal的弱引用。

3.ThreadLocalmap会把那些过期的key设置为null,并且删除那些key为null的值。

4.ThreadLocalmap的key是弱引用,也就是说弱引用在没有被其他强引用所引用,gc就会回收。而value是强引用,如果用线程池技术,该线程一直没有结束,value一直没办法被回收。所以key为null的entry的value就一直占据内存,造成内存泄露。

5.因为上述的原因,在ThreadLocal这个类的get()、set()、remove()方法,均有实现回收 key 为 null 的 Entry 的 value所占的内存。所以,为了防止内存泄露(没法访问到的内存),在不会再用ThreadLocal的线程任务末尾,调用一次 上述三个方法的其中一个即可,一般使用remove。

相关推荐
devpotato2 分钟前
缓存与数据库更新顺序不一致问题
java·数据库·redis
shehuiyuelaiyuehao4 分钟前
算法34,位运算符操作,总结
算法
xcl092513 分钟前
酒馆预约系统开发实战:从需求分析到上线全流程指南
java·spring boot·需求分析
Navigator_Z17 分钟前
LeetCode //C - 1224. Maximum Equal Frequency
c语言·算法·leetcode
Kyrie_kk22 分钟前
Java--IO--Path文件访问
java·后端
qinqinzqq26 分钟前
Maven POM 格式、Schema 与 XSD:一篇讲透
java·maven
o盟44 分钟前
maven本地仓库有 总是去私仓中下载
java·maven·intellij-idea
devpotato1 小时前
Java 批量并发请求:从“能并发“到“结果按完成顺序可用“的三种写法与选型
java
Navigator_Z1 小时前
LeetCode //C++ - 1226. The Dining Philosophers
c语言·算法·leetcode
FOORIR1 小时前
3D视觉+AI客流系统怎么做:从Sensor Pipeline到数据事件引擎
算法