乐趣区

关于多线程:ThreadLocal

ThreadLocal

二、工作流程

参考:https://www.cnblogs.com/xzwbl…

  1. Thread 类中有一个成员变量属于 ThreadLocalMap 类 (一个定义在 ThreadLocal 类中的外部类),它是一个 Map,他的 key 是 ThreadLocal 实例对象。

    // ThreadLocal.class
    // ThreadLocal values pertaining to this thread. This map is maintained 
    // ThreadLocalMap 是一个定制化的 HashMap
    ThreadLocal.ThreadLocalMap threadLocals = null;

    key 是 ThreadLocal 实例对象

  2. 当为 ThreadLocal 类的对象 set 值时,首先取得以后线程的 ThreadLocalMap 类属性,而后以 ThreadLocal 类的对象为 key,设定 value。get 值时则相似。没有则间接创立新的 ThreadLocalMap 赋值给 threadLocals

    ThreadLocalMap getMap(Thread t) {return t.threadLocals;}
    
    void createMap(Thread t, T firstValue) {t.threadLocals = new ThreadLocalMap(this, firstValue);
    }
  3. ThreadLocal 变量的流动范畴为某线程,是该线程“专有的,单独霸占”的,对该变量的所有操作均由该线程实现!也就是说,ThreadLocal 不是用来解决共享对象的多线程拜访的竞争问题的,因为 ThreadLocal.set() 到线程中的对象是该线程本人应用的对象,其余线程是不须要拜访的,也拜访不到的。当线程终止后,这些值会作为垃圾回收。
退出移动版