可以使用CompletableFuture的静态方法allOf来等待所有异步方法执行完毕。

首先,你需要将所有异步方法返回的future添加到一个list集合中:

List<CompletableFuture<Void>> futures = new ArrayList<>();
while (condition) {
    CompletableFuture<Void> future = CompletableFuture.supplyAsync(() -> {
        // 异步执行的方法
        return null;
    });
    futures.add(future);
}

然后,可以使用CompletableFuture.allOf方法等待所有future执行完毕:

CompletableFuture<Void> allFutures = CompletableFuture.allOf(futures.toArray(new CompletableFuture[0]));

最后,可以使用allFutures的get方法阻塞等待所有异步方法执行完毕:

allFutures.get();

完整示例代码如下:

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

public class Main {
    public static void main(String[] args) throws ExecutionException, InterruptedException {
        List<CompletableFuture<Void>> futures = new ArrayList<>();
        while (condition) {
            CompletableFuture<Void> future = CompletableFuture.supplyAsync(() -> {
                // 异步执行的方法
                return null;
            });
            futures.add(future);
        }

        CompletableFuture<Void> allFutures = CompletableFuture.allOf(futures.toArray(new CompletableFuture[0]));
        allFutures.get();

        // 所有异步方法执行完毕后的后续操作
    }
}

注意,以上示例中使用的CompletableFuture的泛型为Void,因为异步方法不需要返回值。如果异步方法有返回值,可以根据实际情况修改泛型类型

Java中在一个while循环体中我使用CompletableFuturesupplyAsync方法异步去执行某个方法我使用一个list集合接受所有异步方法返回的future我想要等待所有异步方法执行完之后再执行后续的方法该如何实现

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

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