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