Thread Local

1、ThreadLocal 是什么 ?有什么用 ?

为本地线程生成共享变量副本的工具类。CopyValueIntoEveryThread

主要作用:同一线程中做到跨类,跨方法传递数据,而不用传递参数和依靠返回值

具体实现:

  1. 定义全局的 ThreadLocal对象 ,变量记作 tl
  2. 共享变量
  3. 线程内调用 tl的方法,tl会为当前线程创建ThreadLocalMap对象(如果不存在),变量记作 map
  4. map创建Entry对象,存储键值对,keytl变量副本 value是初始化值(shared副本

每个线程创建自己的 ThreadLocalMap相互不干扰,而又共享了 全局变量

2、Thread Local 副作用

会产生内存泄露

tl强引用指向 ThreadLocal实例对象mapEntrykey(记作t1变量副本)弱引用指向 ThreadLocal实例对象

  1. t1的指向断开,如果t1变量副本还是强引用,ThreadLocal实例对象,无法回收,会造成内存泄漏。
  2. 使用 弱引用 还可能造成内存泄漏,即使 key==null,Entry对象还存在,value没有被回收,造成内存泄漏,每次都要 remove,清除 Entry

原文地址:https://www.cnblogs.com/sweetorangezzz/p/13516054.html