1. 概述和学习总结
(1)ThreadLocal的值,在父-子线程中不能传递
(2)JDK
的InheritableThreadLocal
类可以完成父线程到子线程的值传递。但对于使用线程池等会池化复用线程的执行组件的情况,线程由线程池创建好,并且线程是池化起来反复使用的;这时父子线程关系的ThreadLocal
值传递已经没有意义,应用需要的实际上是把 任务提交给线程池时的ThreadLocal
值传递到 任务执行时。
(3)阿里github上提供的TransmittableThreadLocal
类继承并加强InheritableThreadLocal
类,解决上述的问题。
2. 应用案例
下面是几个典型场景例子。
1. 分布式跟踪系统
2. 日志收集记录系统上下文
3. 应用容器或上层框架跨应用代码给下层SDK传递信息
3. 参考资料
https://www.pianshen.com/article/4164147730/