多线程—ThreadLocal
一、ThreadLocal的含义
线程的变量副本(就像命名一样),每个线程隔离。
二、ThreadLocal的结构
每个Thread都有自己的
ThreadLocalMap
,ThreadLocalMap
的底层是使用数组;
其中每个Entry
,它的key是ThreadLocal<?> k
,继承自WeakReference
, 也就是我们常说的弱引用类型,可以简单地将它的key视作ThreadLocal
,value为代码中放入的值(实际上key并不是ThreadLocal
本身,而是它的一个弱引用)。
每个线程在往ThreadLocal
里放值的时候,都会往自己的ThreadLocalMap
里存,读也是以ThreadLocal
作为引用,在自己的map里找对应的key,从而实现了线程隔离。