ThreadLocalMap中的key是弱引用,如果被GC了,那么线程再去get数据岂不是就没有了?

发布于 2022-09-12 02:15:09 字数 104 浏览 19 评论 0

ThreadLocalMap中的key是弱引用,如果被GC了,那么线程再去get数据岂不是就没有了?

还是说ThreadLocalMap只能存一些缓存数据,被GC了就重新生成。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

灯角 2022-09-19 02:15:09

引用的关系是
Thread -> ThreadLocalMap -> Entity -> 弱引用ThreadLocal数据
所以:

  1. 虽然是弱引用,但是只要其他地方还有普通引用,就不会被清理,会一直存在
  2. 如果不是弱引用,而且用户已经不再持有这个ThreadLocal的引用并且没有调用remove方法,那么只要线程还在,ThreadLocal数据就会一直被引用无法回收,就是内存泄漏了
  3. 所以这里用弱引用一定程度上是帮助忘记调用remove方法的用户做清理工作…
你好,陌生人 2022-09-19 02:15:09

如果被GC了,那么线程再去get数据岂不是就没有了?

如果你还能去get数据,说明还有对ThreadLocal的强引用,那怎么会被GC呢...

不过如果你申明ThreadLocal变量就是用的弱引用,那当我没讲。(这个得算错误使用方法?)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文