ThreadLocal
本地线程,调用set方法往里面存的值,是每个线程互相隔离,互不影响的,每个线程都有一块存储ThreadLocal数据的地方叫做ThreadLocalMap,这个变量专门用于存储当前线程的map数据,调用ThreadLocal.set方法的时候,就是往这个ThreadLocalMap里面存储一个一个的entry,由key和value组成,key是当前的ThreadLocal,value是set()里面的值。
代码中常用到的ThreadLocal只是暴露出来,方便用于获取当前Thread对象内的ThreadLocalMap的工具类
ThreadLocal模型如下:
内存泄露
如果在线程池中使用ThreadLocal,会出现内存泄露的问题,因为当ThreadLocal对象使用完之后,应该要把设置的key,value,也就是Entry对象回收,但线程池中的线程不会回收,而线程对象是通过强引用指向ThreadLocalMap,ThreadLocalMap是通过强引用指向Entry对象,线程不被回收,Entry对象也就不会被回收,从而出现内存泄露