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

相关推荐
~木雨5 分钟前
Java 内部类系列④(收官):内部类底层与版本演进全梳理 —— 合成字段、nestmates 与 JDK18 优化,附全套面试背诵表
java·字节码·内部类·java 面试·nestmates·jdk18
吴声子夜歌7 分钟前
Guava——反射
java·开发语言·guava
X1A0RAN38 分钟前
Jenkins 流水线跨阶段的数据共享:让变量“动态更新“成为可能
java·servlet·jenkins
Rain的Java大神之路44 分钟前
高并发下的热点账户余额扣减:Redis+Lua脚本实现无锁记账
java·spring boot·redis·后端·spring cloud·缓存·lua
随遇而安zx1 小时前
【地基篇】---JVM 类加载 源码解析(基于 Java 8)
java·jvm·python
liudashuang20171 小时前
【无标题】
java
这是程序猿1 小时前
高校宿舍信息管理系统小程序
java·小程序·毕业设计
小宇宙清歡渡1 小时前
Java Stream 流全面实战指南(Spring Boot 3 + JDK 17)
java·springboot·stream流
不爱吃米饭_1 小时前
Apache PDFBox Java PDF处理库
java
mldong1 小时前
流程图上没画人,单子却走对了:工作流引擎内置处理人解析器
java·架构