开篇
数据在哪个线程存储,就要从哪个线程读取,子线程是读取不到的。那如果想要读取该怎么办呢?
示例
遇到开篇说的这种情况,可以使用InheritableThreadLocal
来帮助我们解决这类问题,InheritableThreadLocal
是 ThreadLocal
的子类,我们用 InheritableThreadLocal
和ThreadLocal
来演示下效果,便于更直观的理解。
@Test
void contextLoads() throws InterruptedException {
ThreadLocal threadLocal = new ThreadLocal();
threadLocal.set("许嵩");
System.out.println("threadLocal.get() = " + threadLocal.get());
// 子线程是读取不到的
new Thread(() -> {
String name = Thread.currentThread().getName();
System.out.println(String.format("this is sub thread name:%s, threadLocal.get(): %s", name, threadLocal.get()));
}).start();
Thread.sleep(1000);
// ThreadLocal 修改为 InheritableThreadLocal
ThreadLocal inheritableThreadLocal = new InheritableThreadLocal();
inherita