乐趣区

关于java:InheritableThreadLocal

采纳默认 new 子线程时,inheritThreadLocals=true;若此时父线程 inheritableThreadLocals 不为空,则将父线程 inheritableThreadLocals 传递至子线程。

从 ThreadLocalMap 可知,子线程将 parentMap 中的所有记录逐个复制至本身线程。

然而线程池不行,因为会复用线程

TransmittableThreadLocal,线程池异步之前把以后父线程里的本地变量取出来,而后赋值给 Rannable 包装类里的 capturedRef 属性。接下来大概率会在 run 办法里,将这些捕捉到的值赋给子线程的 holder 赋对应的 TTL 值。达到了线程池中上下文传递。TransmittableThreadLocal 继承自 inheritThreadLocals。所以默认的 new 线程也是能够传递的

退出移动版