关于threadlocal

来源:4-15 收不回来的value

sadcloud

2020-08-06

悟空老师,我有两个问题,问题比较小白,还望解惑,十分感谢!

  1. 手动设置threadlocal=null 和 调用remove方法 二者分别用在什么时候呢?是等效的吗?
  2. 设计entry时候为什么不能把value也设计成弱引用呢,这样gc就一次性都回收掉了 (问题可能有点好笑,还是希望老师可以简单和我说下这种思路的问题)
写回答

2回答

慕桂英43175126

2020-08-09

我分享一下理解,此处的key设置弱引用,但是value设置为强引用,十分精巧,因为使用线程池的情况下,线程不会死,所以对于entry的强引用一直存在,如果主动把value设置null,那么因为entry只有一个弱引用了,也可以清理掉,但是不会清理掉key,那么弱引用就体现价值了,因为entry对象只包含弱引用,所以可以直接被GC掉

0
0

悟空

2020-08-07

  1.  threadlocal=null设置的是threadlocal,但是remove是清除value

  2. value如果设计成弱引用,那么可能在需要value的时候却提示已经被回收了。

0
2
悟空
回复
慕仔8930017
key天然有个创建ThreadLocal实例时的强引用
2022-11-28
共2条回复

深度解密Java并发工具,精通JUC,成为并发多面手

JUC全方位讲解,构建并发工具类知识体系

1599 学习 · 573 问题

查看课程