如何在列表上运行Executor Service并在Java中执行一些操作



我有一个项目列表,我想运行一个执行器服务来执行一些昂贵的操作:

var myList = Arrays.asList("item1", "item2");
var es = Executors.newFixedThreadPool(10);
myList.foreach(item -> {
es.submit(() -> {
performExpensiveAction(item);
})
})
es.shutdown();

假设我在列表中有100个项目,我希望es对所有100个项目执行ExpensiveAction,但它只对10个项目执行操作。

您应该考虑使用invokeAll而不是关闭

shutdown((方法将允许在终止之前执行以前提交的任务,

shutdownNow((方法阻止等待的任务启动并尝试停止当前正在执行的任务。

方法invokeAnyinvokeAll执行最常用的批量执行形式,执行一组任务,然后等待至少一个或全部任务完成。(invokeAll等待所有(

文档

最新更新