如何使用CompletableFuture在多线程环境中协同工作,以便所有子任务完成后主线程才继续执行后续任务?
时间: 2024-12-25 16:37:05 浏览: 2
在Java中,`CompletableFuture`是一种用于异步编程的强大工具,它允许你在多线程环境下有效地管理并发任务。如果你想确保所有的子任务完成后再执行主线程的任务,你可以使用`thenApply()`, `thenAccept()`, 或 `thenCombine()` 等链式操作。
例如:
```java
CompletableFuture.supplyAsync(() -> { // 异步执行子任务1
// 这里是子任务1的代码
return result1;
})
.thenAccept(result1 -> { // 子任务1完成后,执行这个回调
CompletableFuture.supplyAsync(() -> { // 异步执行子任务2
// 这里是子任务2的代码
return result2;
})
.thenAccept(result2 -> { // 同理,子任务2完成后...
CompletableFuture.supplyAsync(() -> { // 所有子任务完成后,再执行主线程任务
// 这里是主线程的任务,可以访问之前的结果
System.out.println("All tasks completed: " + result1 + ", " + result2);
});
});
})
// 如果你想让主线程等待所有子任务完成再执行,可以用thenRun()代替thenAccept()
// .thenRun(() -> {
// // 主线程任务
// });
```
在这个例子中,`supplyAsync()` 方法用于启动一个新的异步任务,`thenAccept()` 和 `thenCombine()` 都会在前一个任务完成后立即执行下一个任务的回调函数。如果需要主线程阻塞直到所有任务都完成,可以在最后一个`thenAccept`或`thenRun`后添加`.join()`方法。
阅读全文