ThreadLocal提供一个线程(Thread)局部变量,访问到某个变量的每一个线程都拥有自己的局部变量。说白了,ThreadLocal就是想在多线程环境下去保证成员变量的安全。
ThreadLocal提供的方法
对于ThreadLocal而言,常用的方法,就是get/set/initialValue方法。
我们直接看相应的源码:
来看下最常用的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); }
ThreadLocalMap getMap(Thread t) { return t.threadLocals; } void
createMap(Thread t, T firstValue) { t.threadLocals = new ThreadLocalMap(this,
firstValue); }
你会看到,set需要首先获得当前线程对象Thread;
然后取出当前线程对象的成员变量ThreadLocalMap;
如果ThreadLocalMap存在,那么进行KEY/VALUE设置,KEY就是ThreadLocal;
如果ThreadLocalMap没有,那么创建一个;
说白了,当前线程中存在一个Map变量,KEY是ThreadLocal,VALUE是你设置的值。
热门工具 换一换