请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

关于threadlocal

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

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

正在回答 回答被采纳积分+3

2回答

慕桂英43175126 2020-08-09 00:06:24

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

0 回复 有任何疑惑可以回复我~
悟空 2020-08-07 01:29:24
  1.  threadlocal=null设置的是threadlocal,但是remove是清除value

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

0 回复 有任何疑惑可以回复我~
  • key设置成弱引用,一旦gc就会被回收掉,也可能在需要的时候已经被回收了呀。这里有点没明白,还望老师解答
    回复 有任何疑惑可以回复我~ 2022-11-21 21:44:14
  • 悟空 回复 慕仔8930017 #2
    key天然有个创建ThreadLocal实例时的强引用
    回复 有任何疑惑可以回复我~ 2022-11-28 10:04:08
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信