java threadlocal 线程结束会释放当前线程的数据吗

 我来答
我才是淡淡
推荐于2017-11-21 · TA获得超过1540个赞
知道小有建树答主
回答量:1289
采纳率:0%
帮助的人:741万
展开全部
after a thread goes away, all of its copies of thread-local instances are
subject to garbage collection (unless other references to these copies exist).
官方解释,翻译一下就是:
在线程消失之后,其线程局部实例的所有副本都会被垃圾回收(除非存在对这些副本的其他引用)。
老虫新树
2018-10-11
知道答主
回答量:10
采纳率:0%
帮助的人:8118
展开全部
每个Thread含有的ThreadLocalMap中的Key为ThreadLocal变量的弱引用,如果一个ThreadLocal变量没有外部强引用来引用它,那么它在JVM下一次GC的时候会被垃圾回收掉,这时候,Map中就存在了key为NULL的value,这个value无法被访问。如果当前线程再迟迟不结束的话(例如当前线程在一个线程池中),那么value所指向的对象可能永远无法释放,也即不能被回收,造成内存泄露。
ThreadLocalMap的设计者很显然也想到了这个问题,所以其在每一次对ThreadLocalMap的set,get,remove等操作中,都会清除Map中key为null的Entry。因此,ThreadLocal一般是不会存在内存泄露风险的。
但是,将清除NULL对象的工作交给别人,并不是一个明智的选择,所以聪明的你,在Thread中使用完ThreadLocal对象后,一定要记得调用ThreadLocal的remove方法,进行手动清除。
---------------------
作者:DarkRanger1
来源:CSDN
原文:https://blog.csdn.net/danchu/article/details/68961461?utm_source=copy
版权声明:本文为博主原创文章,转载请附上博文链接!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式