首先,在每个线程Thread内部有一个ThreadLocalMap类型的对象threadLocals,这个对象就是用来存储变量副本的KV数组,数组元素的key为当前ThreadLocal变量,value为变量副本。
初始时,threadLocals为空,当调用ThreadLocal对象get()方法或set()方法,就会对threadLocals进行初始化。以当前ThreadLocal对象为key,以要保存的副本变量为value,存到threadLocals。
在当前线程里面,如果要使用副本变量,就可以通过get()方法在threadLocals里面查找。
以上就是ThreadLocal的基本原理,ThreadLocal最常用的使用场景包括数据库连接以及Session管理等。