赞
踩
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);
-
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。