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

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

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

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

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

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

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

全部评论

相关推荐

评论
2
收藏
分享

创作者周榜

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