在Java中,可以使用ExecutorService和CompletionService来等待所有List完成。

首先,需要创建一个ExecutorService来执行任务,并创建一个CompletionService来获取已完成的任务结果。然后,使用ExecutorService的submit方法提交所有任务,并将返回的Future对象存储到List中。

接下来,使用一个循环来从CompletionService中获取已完成的任务结果,直到所有任务都完成。可以使用List的size方法来判断任务是否全部完成。

以下是一个示例代码:

ExecutorService executorService = Executors.newFixedThreadPool(10);
CompletionService<Integer> completionService = new ExecutorCompletionService<>(executorService);

List<Callable<Integer>> tasks = new ArrayList<>();
// 添加任务到tasks列表

// 提交所有任务,并将返回的Future对象存储到List中
List<Future<Integer>> futures = new ArrayList<>();
for (Callable<Integer> task : tasks) {
    futures.add(completionService.submit(task));
}

// 等待所有任务完成
int completedTasks = 0;
while (completedTasks < futures.size()) {
    try {
        Future<Integer> completedFuture = completionService.take();
        completedTasks++;

        // 处理已完成的任务结果
        Integer result = completedFuture.get();
        // 处理result

    } catch (InterruptedException | ExecutionException e) {
        e.printStackTrace();
    }
}

// 关闭ExecutorService
executorService.shutdown();

在示例代码中,通过调用completionService.take()方法来获取已完成的任务结果,如果没有任务完成,则该方法会阻塞等待。完成的任务结果存储在一个Future对象中,可以通过调用Future的get()方法来获取结果。在处理完任务结果后,递增completedTasks的计数器。

请注意,需要适当地处理InterruptedException和ExecutionException异常。此外,还需要在任务全部完成后关闭ExecutorService,以释放资源。

希望能帮到你

java 等待所有 listfuture 完成

原文地址: https://www.cveoy.top/t/topic/ivHm 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录