Java中在一个while循环体中我使用CompletableFuturesupplyAsync方法异步去执行某个方法我想要等待所有异步方法执行完之后再执行后续的方法该如何实现
可以使用CompletableFuture的allOf方法来等待所有的CompletableFuture执行完成。
示例代码如下:
import java.util.concurrent.CompletableFuture;
public class Main {
public static void main(String[] args) {
CompletableFuture<Void> future1 = CompletableFuture.supplyAsync(() -> method1());
CompletableFuture<Void> future2 = CompletableFuture.supplyAsync(() -> method2());
CompletableFuture<Void> allFutures = CompletableFuture.allOf(future1, future2);
allFutures.thenRun(() -> {
// 所有异步方法执行完成后的逻辑
System.out.println("All futures completed");
// 执行后续的方法
method3();
});
// 阻塞等待所有异步方法执行完成
allFutures.join();
}
public static void method1() {
// 异步方法1的逻辑
System.out.println("Method 1");
}
public static void method2() {
// 异步方法2的逻辑
System.out.println("Method 2");
}
public static void method3() {
// 后续方法的逻辑
System.out.println("Method 3");
}
}
在上述代码中,我们使用CompletableFuture.supplyAsync方法异步执行method1和method2两个方法。然后,我们使用CompletableFuture.allOf方法将这两个CompletableFuture组合成一个新的CompletableFuture,该CompletableFuture将在所有异步方法执行完成后完成。
接着,我们使用allFutures.thenRun方法设置了一个回调函数,该函数在所有异步方法执行完成后会被调用。在回调函数中,我们可以编写所有异步方法执行完成后的逻辑,然后再执行后续的方法method3。
最后,我们使用allFutures.join方法阻塞等待所有异步方法执行完成
原文地址: https://www.cveoy.top/t/topic/iJu5 著作权归作者所有。请勿转载和采集!