当前位置: 首页 > 知识库问答 >
问题:

Java并行流始终记录相同的线程ID

谷梁昊空
2023-03-14

我在List上使用并行流。我想它会使用WorkJoinPool生成多个工作线程,根据日志,不知何故一直只有一个线程:

14:32:14.561 [http-nio-8080-exec-146] INFO from parent_thread
14:32:15.071 [http-nio-8080-exec-146] INFO from first_element_execution
14:32:15.228 [http-nio-8080-exec-146] INFO from second_element_execution
... and so on.

以下是我的代码的简短版本:

List<String> myList = ...;
myList.parallelStream().forEach( // Do something and slf4j.log it );

[编辑]我在本地机器上尝试了一些非常简单的代码,它确实产生了多个线程。不幸的是,我无法在本地或其他环境中运行生产代码。。

为什么我的并行流不使用WorkJoinPool生成多个线程?

非常感谢。

共有1个答案

陆飞鸿
2023-03-14

这取决于您的生产CPU有多少内核。您使用的是常见的ForkJoinPool,它由表达式初始化:可用处理器数量-1。所以这个线程池可能只有1个线程。

 类似资料:
  • 我需要在多个线程中使用来自Kafka分区的记录,每个线程上有唯一的记录要处理。我有以下代码,我不知道是什么错误 结果 应为:

  • 我正在使用最新的Java8 lambdas和并行流处理数据。我的代码如下: 流以一个元素开始,但在第二阶段会添加更多的元素。我的假设是这个流应该并行运行,但在这种情况下只使用一个工作线程。 如果我从2个元素开始(即我在初始列表中添加第二个元素),那么就会产生2个线程来处理流,依此类推...如果我没有显式地将流提交给ForkJoinPool,也会发生这种情况。 问题是:它是记录在案的行为还是可能在实

  • 我有一个C语言的日志类。它是一个支持多线程的单例。 我想要实现的(主要是做到的): 拥有通用记录器类 独生子女 将其与流插入运算符一起使用,而不是作为函数调用 该类写入std::stringstream,在std::endl上刷新std::stringstream内容到文件。一个很大的缺点是,std::endl需要一次,每次调用一次,才能在多线程应用程序中正常工作。不确定这是否是一个好方法,但目前

  • 问题内容: 是否可以为Java 8 并行流指定自定义线程池?我在任何地方都找不到。 假设我有一个服务器应用程序,并且想使用并行流。但是应用程序很大并且是多线程的,所以我想将其划分。我不希望一个模块中的一个模块中的某个模块运行缓慢,而另一个模块中的任务却运行缓慢。 如果不能为不同的模块使用不同的线程池,则意味着在大多数实际情况下,我不能安全地使用并行流。 请尝试以下示例。在单独的线程中执行一些CPU

  • 我正在spring Boot中使用异步任务执行器对数百万条记录的数据进行分区,块大小为1000条,网格大小为10条。为了从数据库中获取特定的分区数据,我正在使用项目读取器的before步骤中的StepExecution获取分区数据的开始和结束索引(来自Partitioner类)。 例如:项目阅读器 Item Reader遍历testData列表并将testData值返回给writer TestDa

  • 九月面的,后续-oc,需要强制实习怕论文搞不完所以拒了 是秋招的第一个offer,还是很感谢同程 一面 1.相同的表单,使用的低代码方法 2.vue2和vue3的区别 3.vue2和vue3的v-model的区别,vue2的v-model的缺陷 4.vue2中孙子组件想用爷爷组件的this,怎么操作(组件通信) 5.原型链 6.apply、call方法的区别 7.es6箭头函数指向 8.css权重