InheritableThreadLocal

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

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

但是线程池不行,因为会复用线程

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

你可能感兴趣的:(java)