ThreadLocal 中的 Entry 为什么要继承WeakRefrence
ThreadLocalMap 的 Entry 继承了 WeakRefrence<ThreadLocal>。
为什么这样子?
有人说是为了防止内存泄漏,但是没有给出怎样情况下会发生内存泄漏。
有木有大神可以详细分析一下WeakRefrence的作用,还有Entry为什么要继承WeakRefrence。
继承一个WeakRefrence 又是什么个意思?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
看一个例子
ThreadLocal
是为线程中的对象服务的。ThreadLocalMap
中保存的是当前线程中的ThreadLocal
对象所引用的其他对象。当
ThreadLocal
对象不再使用的时候,最好把它从ThreadLocalMap
中的Entry
对象中删掉,以免引起内存泄露。WeakRefrence
正好适合这种场景。比如有下面这个对象:
当
Foo
对象中的tl
不再使用的时候,应该让垃圾回收器把tl
回收掉。但是如果不使用WeakRefrence
,那么当前线程上的ThreadLocalMap
中就会有一个Entry
引用着tl
对象,导致垃圾回收器无法回收tl
,除非线程结束,这样就存在内存泄露的风险。将实体中的
ThreadLocal
对象通过WeakRefrence
来引用,当tl
对象不再使用的时候,WeakRefrence
中的引用会自动断开,这样就不会阻止垃圾回收了。