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

 

posted @ 2022-02-16 16:57  昵称已被使用!!!  阅读(18)  评论(0编辑  收藏  举报