1 . Thread 类里有一个变量,是 ThreadLocalMap 类型的,名为 threadLocals;
2. ThreadLocalMap 的 key 为 ThreadLocal 变量引用, value 即为 ThreadLocal 存储的值;
3. 一般使用方法是建一个独立的类,里边存放 ThreadLocal 常量,以供其他线程使用
class MyThreadLocal {
private static final ThreadLocal<Object> threadLocal = new ThreadLocal<Object>();
}
当时执行 MyThreadLocal.threadLocal.set(xxx) 时,
首先获取执行该 set 语句的当前线程,据此找到其 ThreadLocalMap,然后再以 threadLocal 引用作为 key,设置对应的 value;
当执行 MyThreadLocal.threadLocal.get() 时,
首先获取执行该 get 语句的当前线程,据此找到其 ThreadLocalMap,然后再以 threadLocal 引用作为 key,找到对应的 value;
整体来看,查找定位过程遵循两步走:current thread -> threadlocal map -> threadlocal value