ThreadLocal浅谈

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支持空值

再来研究源码

  1. 构造函数是默认的,没啥好解释的
  2. 既然要访问,肯定要有 get()set() 方法咯,首先看一下 get() 方法
    这里写图片描述
    我们看到有一个 Values values = values(currentThread); 方法,看样子像是从当前的线程中取一个values,那我们就来看一下这个values(Thread current)方法吧
    这里写图片描述
    我的天,你怎么可以如此的简洁,就是返回一个Thread的成员变量!!!
    好吧我们可以看到 Thread 中有一个这个东西
    这里写图片描述
    既然这样,我们就继续分析get() 方法
    根据代码,如果取到的Values为空,就会初始化这个Values,如果不为空,就从这个 Values 中取出 table 变量,这个变量是一个Object数组类型的,然后经过与运算得出需要的 index 返回数组中指定位置的值。
    那下面我们就看一下 set() 方法
    这里写图片描述
    简单来说就是从线程中拿到Values,如果为空就初始化,然后设置值,不为空就直接设置值
  3. 是时候来看一下 Values 的庐山真面目了
    代码太多,就不贴上来了,我们一点一点来分析
    我们先看一下Values的成员变量
    这里写图片描述
    最重要的就是 private Object[] table; 它包含了你存放的所有数据,Values 类中的其他方法基本都是操作这个 table 数组的,有兴趣的同学可以自己研究一下,我这里就不多说了
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值