InheritableThreadLocal可以用于主子线程之间传递参数,但是它必须要求在主线程中手动创建的子线程才可以获取到主线程设置的参数,不能够通过线程池的方式调用。
但是现在我们实际的项目开发中,一般都是采用线程池的,这时候InheritableThreadLocal就有点不够用了。
所以TransmittableThreadLocal就出场了。
TransmittableThreadLocal是阿里开源的一个方案。
开源地址:https://github.com/alibaba/transmittable-thread-local
这个类继承并加强了InheritableThreadLocal。经常被用在一下场景中:
下面通过一个代码示例来验证和查看TransmittableThreadLocal是如何将主线程中的参数传递到线程池中的:
public class TransmittableThreadLocalTest {
static ExecutorService threadPool = Executors.newFixedThreadPool(10);
static TransmittableThreadLocal> transmittableThreadLocal = new TransmittableThreadLocal<>();
public static void main(String[] args) {
transmittableThreadLocal.set("test");
threadPool.execute(()-> {
System.out.println("result= " + transmittableThreadLocal.get());
});
}
}
从打印的结果可以看到,线程池中的线程是可以成功获取到main线程中通过TransmittableThreadLocal设置的参数test的值的。