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 是一个定制化的 HashMapThreadLocal.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() 到线程中的对象是该线程本人应用的对象,其余线程是不须要拜访的,也拜访不到的。当线程终止后,这些值会作为垃圾回收。