首先,在每个线程 Thread 内部有一个 Threadlocal.ThreadLocalMap 类型的成员变量 ThreadLocals,ThreadLocalMap 是 ThreadLocal 的内部类,这个 ThreadLocals 就是用来存储实际的变量副本,键值为当前的 ThreadLocal 对象,value 为变量副本。
初始时,在 Thread 里,threadlocals 为空,当通过 ThreadLocal 变量调用 get() 方法或 set() 方法,就会对 Thread 类中的 threadlocals 进行初始化,并且以当前 ThreadLocal 变量为键值,以 ThreadLocal 要保存的副本变量为 value,存到 threadlocals
然后再当前线程里面,如果要使用副本变量,就可以通过 get 方法在 threadlocals 里面查找。
本质上来说,ThreadLocal 只是用一个 Map 存储了不同 Thread 和 副本变量的对应关系,一个 Thread 对应一个变量。具体用法如下:
1 | public class nomalThread { |