ThreadLocal理解

ThreadLocal就是用于存储当前运行线程独享的变量值,不会与其他线程共享。

1. Thread类中的threadLocals属性值

    /* ThreadLocal values pertaining to this thread. This map is maintained
     * by the ThreadLocal class. */
    public class Thread implements Runnable {
        ....
        ThreadLocal.ThreadLocalMap threadLocals = null;
        ...
    }
复制代码

2. ThreaLocal与ThreadLocalMap的关系类图

3. 理解点:

  1. ThreadLocal是对ThreadLocalMap操作的封装,通过set方法和get方法来设置ThreadLocalMap对象的key、value值。
  2. key值是ThreaLocal对象,而value是传进去的任意值。而一个Thread对象都有一个ThreadLocal.ThreadLocalMap类型的threadLocals属性,是一个map,也就是表示一个Thread线程对象的threadLocals可以设置多个ThreadLocal对象作为key。
  3. 在线程通过ThreadLocal对象去调用set方法时,若threadLocals属性为null,才会初始化threadLocals属性值。
public class ThreadLocal<T> {

    /**
    * set方法 当前线程关联的threadLocals设置ThreadLocal为key的值。
    */
    public void set(T value) {
        Thread t = Thread.currentThread();
        ThreadLocalMap map = getMap(t);
        if (map != null)
            map.set(this, value);
        else
            createMap(t, value);
    }
    
    
    /**
    *get方法,通过当前线程属性threadLocals获取ThreadLocal为key所对应的值。
    */
        public T get() {
        Thread t = Thread.currentThread();
        ThreadLocalMap map = getMap(t);
        if (map != null) {
            ThreadLocalMap.Entry e = map.getEntry(this);
            if (e != null) {
                @SuppressWarnings("unchecked")
                T result = (T)e.value;
                return result;
            }
        }
        return setInitialValue();
    }
}



复制代码
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值