【发布时间】:2017-04-27 09:26:43
【问题描述】:
我想使用执行器服务或使用 java 中的任何其他方法并行化嵌套的 for 循环。我想创建一些固定数量的线程,以便线程不会完全获取 CPU。这里的每个线程都在做一些独立的工作。第一个线程应该执行 j = 0, 20, 30, 40, ... 第二个线程应该执行 j = 1, 21, 31, 41, ... 每个线程都应该并行执行。这是我想做的,
ExecutorService service = Executors.newFixedThreadPool(NoOfThreads);
for(int i = 0; i < 100; i++) {
for(int j=0; j < 50000000; j++) {
//some independent work
//parallelize this work
...
这就是我所做的
for (int i = 0; i < 100; i++) {
ExecutorService executorService = Executors.newFixedThreadPool(20);
for (int j=0; j < 50000000; j++) {
executorService.execute(new Runnable() {
@Override
public void run() {
//do some work
//send data to some api
}});
}
executorService.shutdown();
while (!executorService.isTerminated()) {
System.out.print("");
}
}
我想确保这是我想做的正确实现。请告诉我如何改进我的代码。
【问题讨论】:
-
我建议使用并行流并让它处理您的问题。它可能有效,也可能无效,我不确定,但我会测试它。
-
@Shadov 我认为这不是一个很好的建议。简单的道理是:人生没有弯路。尤其是在谈论在编程中使用“并行”抽象时。一个人必须了解你在做什么。只是将“并行流”扔给通常对使用并行事物没有太多线索的人不会有太大帮助。他已经负担过重使用执行器和任务。拉起并行流有什么好处?!
标签: java multithreading parallel-processing nested-loops