前言
Java分布式系统中经常会用到 ThreadLocal 来解决线程间数据隔离性的问题,但是 ThreadLocal 存在父子线程间值无法传递的局限性,为了解决上面的问题 InheritableThreadLocal 就应运而生,然而 InheritableThreadLocal 又存在着池化子线程与父线程间值无法传递的局限性,为了解决上面这些问题,最终阿里的 TransmittableThreadLocal 脱颖而出,本文将重点以代码来演示TTL的一些用法。
一、TransmittableThreadLocal简介
在使用线程池等会池化复用线程的执行组件情况下,提供ThreadLocal值的传递功能,解决异步执行时上下文传递的问题。
JDK的InheritableThreadLocal类可以完成父线程到子线程的值传递。但对于使用线程池等会池化复用线程的执行组件的情况,线程由线程池创建好,并且线程是池化起来反复使用的;这时父子线程关系的ThreadLocal值传递已经没有意义,应用需要的实际上是把 任务提交给线程池时的ThreadLocal值传递到 任务执行时。
本库提供的TransmittableThreadLocal类继承并加强InheritableThreadLocal类,解决上述的问题,使用详见User Guide。