ransmittableThreadLocal
(TTL
):在使用线程池等会池化复用线程的执行组件情况下,提供ThreadLocal
值的传递功能,解决异步执行时上下文传递的问题。一个Java
标准库本应为框架/中间件设施开发提供的标配能力,本库功能聚焦 & 0依赖,支持Java 6~21
。
JDK
的InheritableThreadLocal类可以完成父线程到子线程的值传递。但对于使用线程池等会池化复用线程的执行组件的情况,线程由线程池创建好,并且线程是池化起来反复使用的;这时父子线程关系的ThreadLocal
值传递已经没有意义,应用需要的实际上是把 任务提交给线程池时的ThreadLocal
值传递到 任务执行时。
具体依赖
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>transmittable-thread-local</artifactId>
<version>2.14.0</version>
</dependency>
测试代码
@Test
public void TestThreadLocal() {
threadlocal.set("thread-local-parent");
CompletableFuture.runAsync(() -> {
System.out.println( "sonThread:" + threadlocal.get());
}, threadPoolExecutor);
}
@Test
public void TestTTL() {
transmittableThreadLocal.set("thread-local-parent");
CompletableFuture.runAsync(() -> {
System.out.println( "sonThread:" + transmittableThreadLocal.get());
}, threadPoolExecutor);
}