- 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内部原理,我也暂时处于懵逼状态,以后待续。。。。。