java - 为这种情况动态生成线程 Java

标签 java multithreading performance

假设我有一个 List 整数。我拥有的每个 int 都必须乘以 100。要使用 for 循环执行此操作,我将构造如下内容:

for(Integer i : numbers){
  i = i*100;
}

但假设出于性能原因,我想同时为 numbers 中的每个数字生成一个线程,并对每个线程执行一次乘法,将结果返回到相同的 List。做这样的事情的最佳方式是什么?

我的实际问题并不像 int 的乘法那样微不足道,而是一个循环的每次迭代都需要大量时间的任务,所以我想全部完成同时减少执行时间。

最佳答案

如果可以使用 Java 7,Fork/Join框架正是为解决这个问题而创建的。如果没有,在 this link 有一个 JSR166(fork/join 提案)源代码.

本质上,您将为每个步骤(在您的情况下,为数组中的每个索引)创建一个任务,并将其提交给可以池化线程的服务(fork 部分)。然后等待一切完成并合并结果(连接部分)。

使用服务而不是启动自己的线程的原因是,创建线程可能会产生开销,并且在某些情况下,您可能希望限制线程的数量。例如,如果您在一台四 CPU 机器上,同时运行四个以上的线程就没有多大意义。

关于java - 为这种情况动态生成线程 Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8902065/

相关文章:

java - 如何从字符串中提取数字并计算它们之间的元素?

java - 使用带有 maven 而不是 ant 的 spring 框架

sql - 计数(*) 与计数(1) - SQL Server

MySQL规范化存储过程性能

performance - 为什么Java IO中的默认缓冲区大小为8k?

java - 获取亚马逊页面和产品信息的最佳方式

java - Hibernate 延迟获取 - 获取子对象

.net - 在多线程分布式应用程序中提高性能消耗内存

c# - 在多线程应用程序中使用 MessageBox 显示异常信息

java - 关于线程的wait()/notify