【发布时间】:2018-10-16 13:07:23
【问题描述】:
我想为 parallelStream 使用自定义 ThreadPool。原因是我想在任务中使用 MDCContext 。这是我编写的使用自定义线程池的代码:
final ExecutorService mdcPool = MDCExecutors.newCachedThreadPool();
mdcPool.submit(() -> ruleset.getOperationList().parallelStream().forEach(operation -> {
log.info("Sample log line");
});
当 MDC 上下文没有被复制到任务时,我查看了日志。这些是我找到的日志。第一个日志在“(pool-16-thread-1)”中执行,但其他任务正在“ForkJoinPool.commonPool-worker”上执行。第一个日志也有 MdcContextID。但由于我使用自定义线程池提交任务,所有任务都应该在自定义线程池中执行。
16 Oct 2018 12:46:58,298 [INFO] 8fcfa6ee-d141-11e8-b84a-7da6cd73aa0b (pool-16-thread-1) com.amazon.rss.activity.business.VariablesEvaluator: Sample log line
16 Oct 2018 12:46:58,298 [INFO] (ForkJoinPool.commonPool-worker-11) com.amazon.rss.activity.business.VariablesEvaluator: Sample log line
16 Oct 2018 12:46:58,298 [INFO] (ForkJoinPool.commonPool-worker-4) com.amazon.rss.activity.business.VariablesEvaluator: Sample log line
16 Oct 2018 12:46:58,298 [INFO] (ForkJoinPool.commonPool-worker-13) com.amazon.rss.activity.business.VariablesEvaluator: Sample log line
16 Oct 2018 12:46:58,298 [INFO] (ForkJoinPool.commonPool-worker-9) com.amazon.rss.activity.business.VariablesEvaluator: Sample log line
16 Oct 2018 12:46:58,299 [INFO] (ForkJoinPool.commonPool-worker-2) com.amazon.rss.activity.business.VariablesEvaluator: Sample log line
16 Oct 2018 12:46:58,299 [INFO] (ForkJoinPool.commonPool-worker-15) com.amazon.rss.activity.business.VariablesEvaluator: Sample log line
这是应该发生的还是我错过了什么?
【问题讨论】:
标签: java java-8 threadpool mdc forkjoinpool