ThreadLocal

    ThreadLocal我一开始接触的时候,以为是“本地线程”搞的我云里雾里的,看了内部实现后,这个Local应该称为“局部”。

    在《多线程并发编程实战》提到:维持线程封闭性的一种规范方法,这个类为每个使用该变量的线程都存有一份独立的副本

问题-解析

    为每个使用该变量的线程都存有一份独立的副本? 这是怎么实现的呢?

    ThreadLocal并非线程,而是一个线程的局部变量。准确的来说ThreadLocalMap是线程的一个局部变量,而ThreadLocal包装了一些方法。

    //ThreadLocalMap会根据TheadLocal得到table[i]中的Entry(简略的拉链法Map),Entry存放的就是key和value。

    //整个流程就是ThreadLocal根据Thread得到当前线程中的局部变量ThreadLocalMap这也是为什么每个使用这个变量都有一份独立的副本的缘故,然后在ThreadLocal中再通过this得到存放在Map中的Entry(多份ThreadLocal不会冲突的原因)。ThreadLocal中的get,set其实都是对线程本身中的变量进行操作。

见源码(主要看get()和set()):       

         ThreadLocal源码简单解析

 ThreadLocal源码简单解析

 ThreadLocal源码简单解析

 ThreadLocal源码简单解析



相关文章: