假设我有一个 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/