Thread ThreadLocal ThreadLocalMap 关系

1 . Thread 类里有一个变量,是 ThreadLocalMap 类型的

2.  这个 ThreadLocalMap 负责把我们创建的所有 ThreadLocal 变量存起来

3.  然后,我们就不需要关注 ThreadLocal 变量是怎么跟 Thread 关联的了,直接 get/set 就 OK


ThreadLocalMap 就是我们创建出的众多 ThreadLocal 变量的容器,而这个容器是线程的成员,被独占


ThreadLocalMap 中的 Key 就是我们创建的 ThreadLocal 变量的引用,

因此调用 tl1.set 或 tl1.get 时,能根据 tl1 引用在 Map 中找到自己,读取或更新自己的值


而 ThreadLocalMap 是线程的成员变量,故获取 ThreadLocalMap 时先获取当前线程,

再读取它的 ThreadLocalMap 成员即可(变量名 threadLocals)


ThreadLocal 类型的变量,相当于在内部支持了对 ThreadLocalMap 的操作,省得我们自己把变量放到 Map 里了,直接一个 set 它自己就把自己放进 Map 了


其实,假如 ThreadLocalMap 开放操作接口的化,我们可以定义普通变量(不是 ThreadLocal 类型的),

手动放到 ThreadLocalMap 里,效果应该也差不多,

总之就是 ThreadLocal 类型的变量天生就支持操作 ThreadLocalMap

猜你喜欢

转载自blog.csdn.net/shida_csdn/article/details/80060101