简单理解ThreadLocal
可以操作对线程自身的ThreadLocal.ThreadLocalMap,存放属于每个线程自己的内容,线程之间隔离。
源码:
public T get() {
//获取当前线程
Thread t = Thread.currentThread();
//获取当前线程的Map(每个Thread都有一个ThreadLocal.ThreadLocalMap)
ThreadLocalMap map = getMap(t);
if (map != null) {
//map的key为一个ThreadLocal对象,value是存的值
ThreadLocalMap.Entry e = map.getEntry(this);
if (e != null) {
@SuppressWarnings("unchecked")
T result = (T)e.value;
return result;
}
}
return setInitialValue();
}
public void set(T value) {
//获取当前线程
Thread t = Thread.currentThread();
//获取线程的map
ThreadLocalMap map = getMap(t);
if (map != null)
//map的key为一个ThreadLocal对象
map.set(this, value);
else
createMap(t, value);
}
- Thread有一个属性ThreadLocalMap,它由ThreadLocal维护。Thread线程可拥有多个ThreadLocal维护多个自己的线程独享的值。