ThreadLocal的原理

ThreadLocal原理

1ThreadLocal是一个工具类,为每个线程提供自己专属的本地变量

2ThreadLocal底层是通过ThreadLocalMap实现的,每个Thread对象中存在一个ThreadLocalMap,Map的key为ThreadLocal对象 ,Map的value为要缓存的值

ThreadLocal内存泄露问题是怎么产生的?

ThreadLocalMap 中使用的 key 为 ThreadLocal 的弱引用,而 value 是强引用。,在垃圾回收的时候,key 会被清理掉,而 value 不会被清理掉。假如我们不做任何措施的话,value 永远无法被 GC 回收,这个时候就可能会产生内存泄露。使用完 ThreadLocal方法后最好手动调用remove()方法(清除ThreadLocalMap中的带有key为该ThreadLocal对象的Entry)。

ThreadLocal的应用场景

当一个共享变量是共享的,但是需要每个线程互不影响,相互隔离,就可以使用ThreadLocal

相关推荐
z落落7 小时前
C# 多接口实现、重名成员、显式实现、接口继承+抽象类和接口区别
java·开发语言·c#
C137的本贾尼7 小时前
【实战】分析一张真实业务表的 InnoDB 存储结构
java·大数据·数据库
超梦dasgg7 小时前
亿级数据 不停服务平滑迁移(生产环境实战方案)
java·数据库
Zella折耳根7 小时前
Java 正则表达式实战:IP 地址匹配与替换全解析
java·tcp/ip·正则表达式
摇滚侠7 小时前
JavaWeb 全套教程 Filter 107-111
java·开发语言·servlet
YIN_尹7 小时前
【Linux系统编程】基础IO第一讲——系统文件IO
android·java·linux·c++
凤山老林7 小时前
81-Java Scanner 类
java·开发语言
linge_sun7 小时前
Sping AI 使用 Ollama 快速搭建本地知识库
java·人工智能·ai编程
沐苏瑶7 小时前
深入浅出 Java 文件操作与 IO:从文件系统到数据流实战
java·开发语言
唐青枫8 小时前
Java MyBatis-Plus 实战指南:用 BaseMapper、Wrapper 和分页写好数据层
java·mybatis