ThreadLocal
不知道怎么定题 T.T
先看一下官方的解释
Implements a thread-local storage, that is, a variable for which each thread has its own value. All threads share the same ThreadLocal object, but each sees a different value when accessing it, and changes made by one thread do not affect the other threads. The implementation supports null values.
翻译一下:实现thread-local存储,即每个线程都有它自己的变量的值。所有线程共享同一个ThreadLocal对象,但访问它的时候,都会看到一个不同的值时,并且一个线程所做的更改不会影响其他线程。ThreadLocal支持空值
再来研究源码
- 构造函数是默认的,没啥好解释的
- 既然要访问,肯定要有 get() 和 set() 方法咯,首先看一下 get() 方法
我们看到有一个 Values values = values(currentThread); 方法,看样子像是从当前的线程中取一个values,那我们就来看一下这个values(Thread current)方法吧
我的天,你怎么可以如此的简洁,就是返回一个Thread的成员变量!!!
好吧我们可以看到 Thread 中有一个这个东西
既然这样,我们就继续分析get() 方法
根据代码,如果取到的Values为空,就会初始化这个Values,如果不为空,就从这个 Values 中取出 table 变量,这个变量是一个Object数组类型的,然后经过与运算得出需要的 index 返回数组中指定位置的值。
那下面我们就看一下 set() 方法
简单来说就是从线程中拿到Values,如果为空就初始化,然后设置值,不为空就直接设置值 - 是时候来看一下 Values 的庐山真面目了
代码太多,就不贴上来了,我们一点一点来分析
我们先看一下Values的成员变量
最重要的就是 private Object[] table; 它包含了你存放的所有数据,Values 类中的其他方法基本都是操作这个 table 数组的,有兴趣的同学可以自己研究一下,我这里就不多说了