ThreadLocal的原理
ThreadLocal的实现依赖于Thread类中的一个ThreadLocalMap字段,它存储ThreadLocal变量本身和对应值的映射。
每个线程都有自己的ThreadLocalMap实例,用于存储该线程持有的所有ThreadLocal变量的值。
当创建一个ThreadLocal变量时,它就是一个ThreadLocal对象的实例。每个ThreadLocal对象都可以存储任意类型的值,这个值对每个线程是独立的。
- 调用ThreadLocal的get()方法时,ThreadLocal会检查当前线程的ThreadLocalMap中是否有与之关联的值。
- 如果有,返回该值
- 若没有,会调用initialValue()方法(如果重写了的话)来初始化该值,然后将其放入ThreadLocalMap中并返回。
- 当调用set()方法时,ThreadLocal会将给定的值与当前线程关联起来,即在当前线程的ThreadLocalMap中存储 一个键值对,键是ThreadLocal对象自身,值是传入的值。
- 当调用remove()方法时,会从当前线程的ThreadLocalMap中移除与该ThreadLocal对象关联的条目

浙公网安备 33010602011771号