ThreadLocal的set(null)和remove方法有什么区别?

8 篇文章 0 订阅

父文章

ThreadLocal父子线程传递实现方案_个人渣记录仅为自己搜索用的博客-CSDN博客

5.ThreadLocal object的set(null)和remove方法有什么区别?

    set(null) 把当前的ThreadLocal为key的值设为了空,避免线程下次再执行其他任务时被使用,但此时这个key对应的Entry值还在,只是Entry.value=null

      remove方法会把这个key对应Entry的值设为空

本质上这个和缓存 是否合适放置一个null值. 

因为放了一个null值,你就不知道该缓存是真的没有值,还是说只是缓存里没有值.

如果遇到大部分的数据都是为空的情况.比如集团的uid 来查询小业务的数据. 这种性能就非常差. 而应该把null的值作为一个值,例如 int value=0; 来解决.

这也是HashTable 不能设置null的原因, 避免了这种尴尬.

ThreadLocalMap里Entry为何的key声明为WeakReference?

记住这个key是用来放自己的. 当自己设置 threadeLocal=null时,这个线程池变量才会被回收. 不过这种场景遇到的不多.

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值