ThreadLocal
二、工作流程
参考:https://www.cnblogs.com/xzwbl…
-
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 实例对象
-
当为 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); }
- ThreadLocal 变量的流动范畴为某线程,是该线程“专有的,单独霸占”的,对该变量的所有操作均由该线程实现!也就是说,ThreadLocal 不是用来解决共享对象的多线程拜访的竞争问题的,因为 ThreadLocal.set() 到线程中的对象是该线程本人应用的对象,其余线程是不须要拜访的,也拜访不到的。当线程终止后,这些值会作为垃圾回收。