【精】关于ThreadLocal你应该知道的几个知识点
2022-03-13 本文已影响0人
小北觅
本文主要回答如下几个问题,如果你已经知道了,太棒啦!那你可以关闭本文去看其他文章啦。
① Thread、ThreadLocal、ThreadLocalMap、value的内存布局。
② ThreadLocalMap的Entry为什么要继承自WeakReference?
③ 众所周知的内存泄露问题是怎么回事?如何解决?
④ 为什么我们建议ThreadLocal要用static的?
⑤ ThreadLocalMap怎么解决Hash冲突的?
一、内存布局
如下图所示:每个 Thread里面都有一个ThreadLocalMap,ThreadLocalMap中真正存储数据的是一个Entry数组,Entry的Key是ThreadLocal对象的弱引用。
<figcaption style="line-height: inherit; margin: 0px; padding: 0px; margin-top: 10px; text-align: center; color: rgb(153, 153, 153); font-size: 0.7em;"></figcaption>
二、为什么继承自WeakReference?
补充一个知识点,Java中引用有四种:强软弱虚。强度依次减弱。只被弱引用关联的对象只能生存到下一次垃圾收集发生之前。 当垃圾收集器工作时,无论当前内存是否充足,都会回收掉只被弱引用关联的对象,因此弱引用一般用来指向非必须对象。
好的,接下来我们解释为什么ThreadLocalMap的Entry要继承自WeakReference。