[英]Parallelize a for loop using multi-threading in java
我在java中有一个for循环,具有以下结构,我需要并行化为固定数量的线程。 让我们说这个数字在numThreads
。 for循环如下。 请注意,只需要并行化外部循环。 我想我需要使用Executor,但我无法弄清楚如何将工作负载分成不同的线程,如果这将改变我在isInsulator[x][y]
类的语句中的循环内的索引。 基本上我想要不同的线程分割X的值并为分配给它们的那些x值运行for循环。 那有意义吗? 任何人都可以帮助我实现这个目标,或者可能会让我朝着正确的方向前进
produce_inputs->process->collect_or_summarize
管道 Stream
的API(它使用一个内部fork-join池调整到盒子上的CPU数量)。 int result = IntStream.generate(() -> 42) // lazy inputs source .limit(100) // limit number of inputs .parallel() // use parallel processing // .sequential() // ...or sequential processing .map(x -> x + 1) // do the processing .reduce(0, Math::addExact); // summarize the result // .collect(toList()); // ...or just collect it to a container
您可以声明一个固定的线程池(它将初始化并仅使用指定数量的线程):
Executor executor = Executors.newFixedThreadPool(numThreads);
您必须将X任务提交到线程池:
for (int i = 0; i < X; i++) {
final int x = i;
executor.execute(() -> submitTask(x));
}
在方法submitTask中,您可以定义您的逻辑:
private void submitTask(final int x) {
for (int y = 0; y < Y; y++) {
//do stuff
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.