1

问题看起来很简单,我有很多(大量)操作需要处理,但是,只有当所有这些操作都返回结果时,主线程才能继续。我只尝试了一个线程,每个操作最多需要 2 到 10 秒,最后大约需要 2.5 分钟。尝试了未来的任务并将它们全部提交给 ExecutorService。所有这些都是一次处理,但是每个都需要大约 40 到 150 秒。在一天结束时,整个过程大约需要 2.1 分钟。

如果我是对的,所有线程不过是一次执行的一种方式,尽管共享处理器的能力,而我认为我会得到处理器大量工作以让我同时执行所有任务同时他们在一个线程中执行。

问题是:有没有办法我可以做到这一点?(也许不是未来的任务,也许是别的东西,我不知道)

细节:我不需要它们同时工作这对我来说实际上并不重要真正重要的是性能

4

1 回答 1

0

您可能创建了太多线程。结果,cpu 不断在它们之间切换,从而产生了明显的开销。

您可能需要限制运行线程的数量,然后您可以简单地提交将并发执行的任务。

就像是:

ExecutorService es = Executors.newFixedThreadPool(8);
List<Future<?>> futures = new ArrayList<>(runnables.size());
for(Runnable r : runnables) {
    es.submit(r);
}
// wait they all finish:
for(Future<?> f : futures) {
    f.get();
}
// all done
于 2015-04-09T21:11:32.947 回答