ThreadLocal 底层
ThreadLocal
作用为会为每个线程 保存线程级别的上下文
public void set(T value) {
Thread t = Thread.currentThread(); //获取当前线程
ThreadLocalMap map = getMap(t); //获取当前线程的map 对象
if (map != null) {
map.set(this, value);
} else {
createMap(t, value);
}
}
- 他会为每个线程维护一个map用于存放线程级别的本地对象。
- spring的数据库事务上下文也是存放在ThreadLocal里的。
- 他是弱引用具体讲解可以看 java引用类型
踩坑
- 之前踩过一个坑,在主线程中开了子线程,在里面拿了threadLocal 结果可想而知。
- 解决方案也很简单,子线程如果需要主线程的参数那么就把他作为参数传入子线程。