当前位置:   article > 正文

阿里TransmittableThreadLocal(TTL)解决threadlocal线程隔离,子线程无法获取父线程值的问题_com.alibaba.ttl.transmittablethreadlocal

com.alibaba.ttl.transmittablethreadlocal

ransmittableThreadLocal(TTL):在使用线程池等会池化复用线程的执行组件情况下,提供ThreadLocal值的传递功能,解决异步执行时上下文传递的问题。一个Java标准库本应为框架/中间件设施开发提供的标配能力,本库功能聚焦 & 0依赖,支持Java 6~21

JDKInheritableThreadLocal类可以完成父线程到子线程的值传递。但对于使用线程池等会池化复用线程的执行组件的情况,线程由线程池创建好,并且线程是池化起来反复使用的;这时父子线程关系的ThreadLocal值传递已经没有意义,应用需要的实际上是把 任务提交给线程池时ThreadLocal值传递到 任务执行时

具体依赖

  1. <dependency>
  2. <groupId>com.alibaba</groupId>
  3. <artifactId>transmittable-thread-local</artifactId>
  4. <version>2.14.0</version>
  5. </dependency>

测试代码

  1. @Test
  2. public void TestThreadLocal() {
  3. threadlocal.set("thread-local-parent");
  4. CompletableFuture.runAsync(() -> {
  5. System.out.println( "sonThread:" + threadlocal.get());
  6. }, threadPoolExecutor);
  7. }
  8. @Test
  9. public void TestTTL() {
  10. transmittableThreadLocal.set("thread-local-parent");
  11. CompletableFuture.runAsync(() -> {
  12. System.out.println( "sonThread:" + transmittableThreadLocal.get());
  13. }, threadPoolExecutor);
  14. }

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号