钜形不锈钢水箱 发表于 2023-5-25 14:25:58

ThreadLocal 的应用及原理

1. 是什么

JDK 对 ThreadLocal 类的描述为:
此类提供线程局部变量。这些变量与普通变量的不同之处在于,每个访问一个变量的线程(通过其get或set方法)都有自己的、独立初始化的变量副本。ThreadLocal 实例通常是类中的私有静态字段,这些字段希望将状态与线程(例如,用户ID或事务ID)相关联。
说白了,ThreadLocal 就是用来存放线程自身相关数据的一个容器,这个容器叫做ThreadLocalMap,它是 Thread 类的一个成员变量,它本身也是一个哈希表,key 是 ThreadLocal 本身,value 是存入的变量。也就是说,变量是存在当前线程的一个ThreadLocalMap中,每个线程在取这个变量的时候,就是取线程自己的本地变量,自然是线程安全的了,所以说 ThreadLocal 提供线程局部变量,或者叫本地变量。
ThreadLocal 的特点有3个关键点:

[*]线程并发:在多线程并发的场景下使用。
[*]数据传递:通过 ThreadLocal ,在同一个线程中,不同组件中传递公共变量。
[*]线程隔离:不同线程之间互不干扰,这种变量在线程的生命周期内起作用。
2. 怎么用

ThreadLocal 的常用方法有:
<ol>public ThreadLocal():通过构造器创建对象。一般是静态的。
ThreadLocal withInitial(Supplier k, Object v)完成的,而k这个参数是传入的this对象,说明什么?我们使用 ThreadLocal 对象调用set,那this肯定是当前new出来的 ThreadLocal 对象!再次说明,我们new出来的 ThreadLocal 对象有两个引用指向它:</p>
[*]threadLocal变量的强引用。
[*]在Entry中的弱引用。

此时再看一张图(这张图被广泛引用,感谢原图作者
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
页: [1]
查看完整版本: ThreadLocal 的应用及原理