Java并行程序基础(十一)

ThreadLocal原理剖析
本文深入解析了Java中ThreadLocal的工作原理,包括其set和get方法的具体实现方式,并解释了ThreadLocalMap的作用及其内部数据结构。
  • ThreadLocal
 public void set(T value) {
        Thread t = Thread.currentThread();
        ThreadLocalMap map = getMap(t);
        if (map != null)
            map.set(this, value);
        else
            createMap(t, value);
    }
在set时,首先获得当前线程对象,然后通过getMap()拿到线程的ThreadLocalMap,
并将值设入ThreadMap中。而ThreadLocalMap可以简单的理解为一个Map,
但是它是定义在Thread内部的成员。
ThreadLocal.ThreadLocalMap threadLocals = null;

而设置到ThreadLocal中的数据,也正是写入了theadLocals这个Map。
其中,key为ThreadLocal当前对象,value就是我们需要的值。
而threadLocals本身保存了当前自己所在线程的所有“局部变量”,
也就是一个ThreadLocal变量的集合。

public T get() {
        Thread t = Thread.currentThread();
        ThreadLocalMap map = getMap(t);
        if (map != null) {
            ThreadLocalMap.Entry e = map.getEntry(this);
            if (e != null)
                return (T)e.value;
        }
        return setInitialValue();
    }

get()方法也是先取得当前线程的ThreadLocalMap对象。然后,通过将自己作为key取得内部的实际的数据。

对于ThreadLocal内部原理,我也暂时处于懵逼状态,以后待续。。。。。

转载于:https://my.oschina.net/projerry/blog/872881

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值