【发布时间】:2014-09-18 20:15:33
【问题描述】:
我需要为最终运行特定CompletableFuture.supplyAsync 供应商的所有线程提供ThreadLocal。
从 javadoc 我看到CompletableFuture 使用“ForkJoinPool commonPool()”,这非常适合我的性能用例。
如何将ThreadLocal(然后删除)转移到运行特定 CompletableFuture 供应商的所有池线程?
备注:
我看到所有CompletableFuture async 完成方法都接受一个执行器。我很想使用
默认ForkJoinPool commonPool() 但如果这不可能,我想我必须覆盖ThreadPoolExecutor 并实现beforeExecute?
【问题讨论】:
-
为什么需要将它作为 ThreadLocal?您不能将值存储在您的
CompletableFuture中吗?如果我们知道您如何将任务排队,我们可能会建议一个包装器,无论如何都要小心。 -
好问题。这是因为我在 CompletableFuture 任务中使用了一个框架(如 Hibernate),它在 Thread Locals 中使用配置数据。我很难接触到依赖于 Thread locals 的类
-
您可以使用与
Supplier相同的方法
标签: java java-8 java.util.concurrent