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。

相关推荐
!!!525几秒前
Java实现斗地主-做牌以及对牌排序
java·算法
我要最优解1 分钟前
关于在mac中配置Java系统环境变量
java·flutter·macos
二十七剑3 分钟前
jvm调试和查看工具
java·linux·jvm
sjsjs116 分钟前
【数据结构-并查集】力扣1722. 执行交换操作后的最小汉明距离
数据结构·算法·leetcode
CoderIsArt18 分钟前
生成一个立方体贴图(Cube Map)
算法·sharpgl
且听风吟ayan24 分钟前
leetcode day20 滑动窗口209+904
算法·leetcode·c#
m0_6759882325 分钟前
Leetcode350:两个数组的交集 II
算法·leetcode·数组·哈希表·python3
_Itachi__26 分钟前
LeetCode 热题 100 160. 相交链表
算法·leetcode·链表
m0_6759882328 分钟前
Leetcode1206:设计跳表
算法·leetcode·跳表·python3
冠位观测者30 分钟前
【Leetcode 每日一题 - 扩展】1512. 好数对的数目
数据结构·算法·leetcode