ThreadLocal有两个问题:
1。每个变量副本是存储在哪了?
2。变量副本是怎样从共享的变量中赋值出来的?源码中threadlocal的初始值是什么时候设置的。
<强> ThreadLocal为每个线程维护一个变量的副本? 强>
每个线程的ThreadLocalMap都是线程自身持有的,但是初始化是在ThreadLocal中,然后每个线程相当于保存了一个map
这个地图存的关键是LocalThread的实例,价值是存储的线程的局部变量
<强>得到方法强>
根据当前线程获取中线程的值
<强>设置方法强>
根据当前线程获取当前线程的地图,然后设置当前线程的值,
从而保证每个线程的值都是从自己的ThreadMap中获取
<强> ThreadLocal为什么会引起内存泄漏强>
ThreadLocal的弱引用作为关键,如果gc想要回收的时候,ThreadLcoal必然回收,线程ref→线程→ThreadLocalMap→输入→价值这个强引用一直就会存在,造成内存泄漏
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。