ThreadLocal
ThreadLocal此类提供线程局部变量。这些变量不同于它们的普通对应变量,因为访问一个变量的每个线程(通过其get或set方法)都有自己的、独立初始化的变量副本。ThreadLocal实例通常是希望将状态与线程(例如,用户ID或事务ID)关联的类中的私有静态字段。
ThreadLocal的set、get源码
当使用set值时,会获取当前线程对象,并用当前线程对象去获取到ThreadLocalMap;
由于ThreadLocalMap初始值为null,则会调用createMap方法先创建当前线程对象ThreadLocalMap;并且把value设置进去。
当使用get获取值时,同样首先获取到当前线程对象,紧接着获取ThreadLocalMap,最后获取set至Entry里面的值并返回。
若ThreadLocalMap为null时,会先去创建ThreadLocalMap对象,并给ThreadLocalMap.Entry赋值为null,最终返回结果为null。
ps:每个线程Thread都维护了自己的threadLocals变量,所以在每个线程创建ThreadLocal的时候,实际上数据是存在自己线程Thread的threadLocals变量里面的,别人没办法拿到,从而实现了隔离。
下一篇:ThreadLocalMap