Java中在一个while循环体中我使用CompletableFuturesupplyAsync方法异步去执行某个方法我使用一个list集合接受所有异步方法返回的future我想要等待所有异步方法执行完之后再执行后续的方法该如何实现
可以使用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,因为异步方法不需要返回值。如果异步方法有返回值,可以根据实际情况修改泛型类型
原文地址: https://www.cveoy.top/t/topic/iJv8 著作权归作者所有。请勿转载和采集!