ThreadLocal是如何使用弱引用的?为什么要使用弱引用?

假设 ThreadLocalMap 中的 Key(即 ThreadLocal 对象)是强引用,在一个方法内部创建了一个 ThreadLocal,用完之后,方法结束了,你希望这个 ThreadLocal 对象被回收。问题是 虽然代码中不再引用创建ThreadLocal时的 变量(强引用断开),但当前线程(通常是线程池中的核心线程,生命周期极长)的 ThreadLocalMap 依然持有 ThreadLocal 的另一个强引用。只要线程不挂,ThreadLocal 对象就永远无法被 GC 回收。这就是 Key 的内存泄漏

所以为了保证当外界不再使用 ThreadLocal 对象时,它能被 GC 正常回收,避免 Key 的内存泄漏,所以把ThreadLocalMap的Key设置为了弱引用。

那Value的内存泄漏如何解决?

遵循“谁创建,谁清理”的原则,在使用完 ThreadLocal 后,务必手动调用remove()方法

#java原理##并发编程#
27届毕业生-Java面试专辑 文章被收录于专栏

帮您起飞,助您着陆心仪大厂。

全部评论

相关推荐

不愿透露姓名的神秘牛友
02-14 10:00
中建西南院 结构设计 校招生,月到手+租房补贴+交通补贴+餐补=6400,加班一年参与11个项目年终4位数 硕士985
点赞 评论 收藏
分享
03-04 07:14
门头沟学院 C++
何木健一:去啥?你能考虑去就是思想有问题,当然一周到岗一天可以考虑一下😨
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务