ThreadLocal原理及内存泄漏原因

  

ThreadLocal有两个问题:

  

1。每个变量副本是存储在哪了?

  

2。变量副本是怎样从共享的变量中赋值出来的?源码中threadlocal的初始值是什么时候设置的。

  

<强> ThreadLocal为每个线程维护一个变量的副本?

  

 ThreadLocal原理及内存泄漏原因

  

每个线程的ThreadLocalMap都是线程自身持有的,但是初始化是在ThreadLocal中,然后每个线程相当于保存了一个map

  

这个地图存的关键是LocalThread的实例,价值是存储的线程的局部变量

  

<强>得到方法

  

 ThreadLocal原理及内存泄漏原因

  

根据当前线程获取中线程的值

  

<强>设置方法

  

 ThreadLocal原理及内存泄漏原因

  

根据当前线程获取当前线程的地图,然后设置当前线程的值,

  

从而保证每个线程的值都是从自己的ThreadMap中获取

  

<强> ThreadLocal为什么会引起内存泄漏

  

 ThreadLocal原理及内存泄漏原因

  

ThreadLocal的弱引用作为关键,如果gc想要回收的时候,ThreadLcoal必然回收,线程ref→线程→ThreadLocalMap→输入→价值这个强引用一直就会存在,造成内存泄漏

  

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

ThreadLocal原理及内存泄漏原因