父文章
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时,这个线程池变量才会被回收. 不过这种场景遇到的不多.