我有一个项目列表,我想运行一个执行器服务来执行一些昂贵的操作:
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((方法阻止等待的任务启动并尝试停止当前正在执行的任务。
方法invokeAny和invokeAll执行最常用的批量执行形式,执行一组任务,然后等待至少一个或全部任务完成。(invokeAll等待所有(
文档