gpt4 book ai didi

java - CommonPool 而非自定义池中的 ParallelStream 队列任务

转载 作者:搜寻专家 更新时间:2023-11-01 03:15:53 29 4
gpt4 key购买 nike

我想为 parallelStream 使用自定义线程池。原因是我想在任务中使用 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

这是应该发生的还是我遗漏了什么?

最佳答案

不支持在自定义线程池中运行并行流。当操作在不同的 Fork/Join 池的工作线程中启动时,它碰巧在不同的 Fork/Join 池中执行,但这似乎不是计划的功能,因为 Stream实现代码仍将在某些操作中在内部使用公共(public)池的工件。

在您的情况下,MDCExecutors.newCachedThreadPool() 返回的 ExecutorService 似乎不是 Fork/Join 池,因此它不会在全部。

有一个功能请求,JDK-8032512 ,关于更多的线程控制。它是开放的,据我所知,没有太多 Activity 。

关于java - CommonPool 而非自定义池中的 ParallelStream 队列任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52836178/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com