ThreadLocal的理解

ThreadLocal内存泄漏与解决方案
ThreadLocal原理详解,其在多线程环境下提供数据隔离。然而,由于弱引用特性可能导致内存泄漏,解决办法包括避免ThreadLocal被GC及使用后及时调用remove方法清理。了解这些能有效防止内存资源浪费。

ThreadLocal原理

ThreadLocal 就是个空壳,本质类似于Map键值对中的一个Key

每个线程对象中,有一个类型为ThreadLocalMap的threadLocals变量。

存储数据时,把这个ThreadLocal做为key,value就是你要存的数据存到这个线程的这个变量中。这就是为什么它能在多线程做到能隔离的效果。

内存泄漏问题
这个其实要和Java的GC机制有关。Java线程中的这个threadLocals变量,可以看成一个map,它这个key便是对ThreadLocal的一个弱引用。

注:Java的GC回收机制采用的是可达性分析算法。简单的可以理解为这个对象是否被其他对象引用(强引用,软引用在内存没有满的时候可能也不会被GC)。弱引用就不管用了,相当于没有引用。这样就导致了ThreadLocal会被回收掉。但是value却没有被一并清除掉。

解决办法:

  1. 确保ThreadLocal不会被GC
  2. 使用完调用remove方法
  3. get/set方法会清除key为null的数据
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值