CompletableFuture.allOf(forLoopFutures.toArray(new CompletableFuture[0])).join();
时间: 2024-12-27 07:22:26 浏览: 41
### 使用 `CompletableFuture.allOf` 方法等待多个异步操作完成
为了确保所有异步操作都已完成,可以使用 `CompletableFuture.allOf` 方法。此方法接受多个 `CompletableFuture` 对象作为参数,并返回一个新的 `CompletableFuture` 实例,在所有给定的 `CompletableFuture` 都完成后才会完成。
下面是一个具体的例子来展示如何实现这一点:
```java
import java.util.concurrent.CompletableFuture;
import java.util.Arrays;
public class CompletableFutureExample {
public static void main(String[] args) {
// 创建三个不同的 CompletableFutures 来模拟异步任务
CompletableFuture<Void> future1 = CompletableFuture.runAsync(() -> {
try { Thread.sleep(100); } catch (InterruptedException e) {}
System.out.println("Task 1 completed");
});
CompletableFuture<Void> future2 = CompletableFuture.runAsync(() -> {
try { Thread.sleep(200); } catch (InterruptedException e) {}
System.out.println("Task 2 completed");
});
CompletableFuture<Void> future3 = CompletableFuture.runAsync(() -> {
try { Thread.sleep(300); } catch (InterruptedException e) {}
System.out.println("Task 3 completed");
});
// 将所有的 futures 放入数组中
CompletableFuture<Void>[] futuresArray = new CompletableFuture[]{future1, future2, future3};
// 使用 allOf 等待所有 completable futures 完成
CompletableFuture<Void> combinedFuture = CompletableFuture.allOf(futuresArray);
// 调用 join() 方法阻塞当前线程直到所有任务完成
combinedFuture.join();
System.out.println("All tasks have been completed.");
}
}
```
在这个例子中,创建了三个独立的任务并将其封装到各自的 `CompletableFuture` 中。通过调用 `allOf()` 并传入这些 `CompletableFuture` 的集合,可以获得一个新的 `CompletableFuture`,该实例会在所有输入的 `CompletableFuture` 成功完成后才标记为成功[^1]。
一旦组合后的 `combinedFuture` 返回,则可以通过调用其上的 `join()` 或者 `get()` 方法使主线程暂停执行直至所有子任务结束。需要注意的是,如果任何一个内部的 `CompletableFuture` 失败,则整个组合也会失败。
阅读全文
相关推荐


















