假设我有这样的任务:
for(Object object: objects) {
Result result = compute(object);
list.add(result);
}
并行化每个 compute() 的最简单方法是什么(假设它们已经可以并行化)?
我不需要与上面的代码严格匹配的答案,只是一个一般性的答案。但如果您需要更多信息:我的任务是 IO 绑定的,这是针对 Spring Web 应用程序的,任务将在 HTTP 请求中执行。
原文由 Eduardo 发布,翻译遵循 CC BY-SA 4.0 许可协议
我建议看一下 ExecutorService 。
特别是,像这样:
请注意,如果
objects
是一个大列表,则使用newCachedThreadPool
可能会很糟糕。缓存的线程池可以为每个任务创建一个线程!您可能想要使用newFixedThreadPool(n)
其中 n 是合理的(比如您拥有的内核数量,假设compute()
受 CPU 限制)。这是实际运行的完整代码: