版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_30698633/article/details/77123728
ThreadLocal顾名思义,本地线程,可以理解为本地线程变量,说白了就是操作本地线程的局部变量。
下面我们通过源码进行说明:
首先,我们看一下ThreadLocal的set方法源码实现:
public void set(T value) {
Thread t = Thread.currentThread();
ThreadLocalMap map = getMap(t);
if (map != null)
map.set(this, value);
else
createMap(t, value);
}
通过源码我们可以发现,首先获取了当前线程,然后调用getMap方法,将当前线程传了进去,返回了ThreadLocalMap。我们先来看一下getMap
方法。
ThreadLocalMap getMap(Thread t) {
return t.threadLocals;
}
嗯??返回了当前线程的threadLocals,所以我们知道了,原来ThreadLocalMap是当前线程的一个变量的类型,所以这个threadLocals是线程自己
本身就有的东西,属于Thread。
然后再看set方法,当map不为空,将this即ThreadLocal当key,这里也许有同学不理解了,为什么要将ThreadLocal当key呢?
因为我们不一定就一个ThreadLocal,有可能有多个,而threadLocals是线程自己本身的,如果有多个ThreadLocal,也就是有
多个值需要存储到threadLocals中,我们就可以通过ThreadLocal来取出不同的信息。
还是有点迷糊??
扫描二维码关注公众号,回复:
4005853 查看本文章
其实说白了就是,每一个Thread线程都拥有自己的一个类型为ThreadLocalMap,名称为threadLocals的局部变量,就像名字表达的这样,这个变量可以
以ThreadLocal为key进行存储自己的信息。而ThreadLocal其实就是为了使我们操作threadLocals变量更加方便,而封装的一个类。使用ThreadLocal和
我们直接自己定义线程的局部变量都一样,只是使用ThreadLocal使我们的代码更加优雅,简洁。我们不用关注线程,只需要操作ThreadLocal就可以取得
该线程自己的变量
上面是我根据自己的理解画的图,如果不对,请及时指正。