ThreadLocal
什么是ThreadLocal?
1.从源码开始了解ThreadLocal
首先进入Thread类
(ctrl+f)搜索会发现Thread类中存在这样一个变量,这个变量可以提供给我们在当前线程中储存一些东西,这就是ThreadLocal的核心。
ThreadLocal.ThreadLocalMap threadLocals = null;
现在我们移步到ThreadLocal类中
找到getMap(Thread t)这个方法,这个方法是获取当前线程的ThreadLocalMap threadLocals变量,threadLocals就是上面提到的Thread类中的变量
set(T value)方法
首先获取到当前线程,通过getMap方法获取当前线程的ThreadLocalMap threadLocals变量,再以ThreadLocal对象作为key保存value在当前线程的ThreadLocalMap threadLocals中
get()同理从当前线程ThreadLocalMap threadLocals变量中获取一个key为ThreadLocal对象的value
栗子:
public static void main(String[] args) {
ThreadLocal<String> tl1 = new ThreadLocal<>();
ThreadLocal<String> tl2 = new ThreadLocal<>();
//创建一个线程 testThread
Thread testThread = new Thread(() -> {
//保存两个值到线程中
tl1.set("value1");
//通过ThreadLocal向testThread线程中的ThreadLocalMap threadLocals变量中set(tl1Object,"value1")
tl2.set("value2");
//通过ThreadLocal向testThread线程中的ThreadLocalMap threadLocals变量中set(tl2Object,"value2")
//通过ThreadLocal从当前线程中ThreadLocalMap threadLocals变量中获取刚刚存储的两个值
System.err.println(tl1.get());
System.err.println(tl2.get());
});
testThread.start();
}
}