Thread、ThreadLocal、ThreadLocalMap关系
Thread、ThreadLocal、ThreadLocalMap关系
Thread、ThreadLocal、ThreadLocalMap关系
-
- 当我们为ThreadLocal变量赋值,实际上就是以当前ThreadLocal实例为Key,值为value的Entry往这个ThreadLocalMap中存放
- Thread 持有 ThreadLocalMap,是本地变量的「所有者」。
- ThreadLocalMap 是实际存储数据的容器,key 为 ThreadLocal 实例,是ThreadLocal的内部静态类。
- ThreadLocal 是操作 ThreadLocalMap 的「工具」,通过它可以安全地向当前线程的 ThreadLocalMap
中存取数据,实现线程隔离。
总结:
- ThreadLocalMap从字面上就可以看出这是一个保存ThreadLocal对象的map(其实是以ThreadLocal为Key),不过是经过了两层包装的ThreadLocal对象:
- JVM内部维护了一个线程版的Map<ThreadLocal,
Value>(通过ThreadLocal对象的set方法,结果把ThreadLocal对象自己当作Key,放进了ThreadLocalMap中),每个线程要用到这个T的时候,用当前的线程去Map里面获取,通过这样让每个线程都拥有了自己独立的变量,人手一份,竞争条件被彻底消除,在并发模式下是绝对安全的变量。

浙公网安备 33010602011771号