completablefuture 异步查询两个方法
时间: 2024-12-27 15:08:10 浏览: 3
`CompletableFuture` 是 Java 中的一个高级并发工具类,它用于处理异步计算结果。当你需要从两个或更多的任务中获取结果,同时又希望在所有任务都完成后得到最终的结果时,可以使用 `CompletableFuture` 来实现。
假设你有两个方法 `methodA()` 和 `methodB()` 都返回 `Future` 对象,它们的执行是异步的。你可以这样做:
```java
// 创建 CompletableFuture 对象,代表尚未完成的任务
CompletableFuture<ReturnType> futureA = CompletableFuture.supplyAsync(() -> methodA());
CompletableFuture<ReturnType> futureB = CompletableFuture.supplyAsync(() -> methodB());
// 当两个任务都完成后,通过 thenCombine 或 thenAcceptAll 连接这两个 Future
CompletableFuture<Void> combinedFuture = CompletableFuture.allOf(futureA, futureB)
.thenApply(v -> { // 在所有任务完成后执行的回调函数
ReturnType resultA = futureA.get(); // 获取 methodA 的结果
ReturnType resultB = futureB.get(); // 获取 methodB 的结果
// 进行后续操作,如合并、对比等
return null;
});
// 如果想要获取最终结果,需要调用 get() 或者使用 blockingGet() 等方法等待完成,但这会阻塞当前线程
combinedFuture.get();
```
在这个例子中,`allOf()` 方法确保了两个 `Future` 都完成之后再继续执行后面的代码。`get()` 方法则是阻塞性的,如果不需要阻塞,可以选择非阻塞的 `join()` 方法替代。
阅读全文