在Java中使用CompletableFuture可以实现循环异步执行方法,并等待所有任务执行完成之后再执行后续的方法。下面是一个示例代码:

import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException;

public class CompletableFutureExample {
    public static void main(String[] args) {
        List<CompletableFuture<Void>> futures = new ArrayList<>();
        
        // 循环创建异步任务
        for (int i = 0; i < 10; i++) {
            int index = i;
            CompletableFuture<Void> future = CompletableFuture.runAsync(() -> {
                // 异步执行的方法
                System.out.println("Task " + index + " started");
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                System.out.println("Task " + index + " completed");
            });
            futures.add(future);
        }

        // 等待所有任务完成
        CompletableFuture<Void> allFutures = CompletableFuture.allOf(futures.toArray(new CompletableFuture[0]));
        try {
            allFutures.get();
        } catch (InterruptedException | ExecutionException e) {
            e.printStackTrace();
        }

        // 所有任务完成之后执行后续方法
        System.out.println("All tasks completed");
    }
}

在上面的示例中,我们循环创建了10个异步任务,并将它们添加到一个List中。然后使用CompletableFuture的allOf方法将所有的CompletableFuture组合成一个新的CompletableFuture,表示等待所有任务完成。

接下来,通过调用allFutures.get()方法等待所有任务完成。这里使用了get()方法来阻塞当前线程,直到所有任务完成。

最后,当所有任务完成之后,我们打印出"All tasks completed",表示可以执行后续的方法。

需要注意的是,CompletableFuture的runAsync方法是异步执行的,所以任务可能会以不同的顺序完成。如果你希望按照特定的顺序执行任务,可以使用thenApplyAsync方法来指定任务的依赖关系

Java中如何使用CompletableFuture实现循环异步执行方法并等待所有任务执行完成之后再执行后续的方法

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

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