java 异步调用多个接口获取结果,并用CompletableFuture.exceptionally() 方法进行异常处理
时间: 2024-03-15 18:46:43 浏览: 147
下面是一个示例代码,演示了如何使用 CompletableFuture 异步调用多个接口获取结果,并使用 exceptionally() 方法处理可能出现的异常情况:
```java
CompletableFuture<String> future1 = CompletableFuture.supplyAsync(() -> {
// 调用接口1,返回结果
if (Math.random() > 0.5) {
throw new RuntimeException("接口1调用失败");
}
return "result1";
});
CompletableFuture<String> future2 = CompletableFuture.supplyAsync(() -> {
// 调用接口2,返回结果
if (Math.random() > 0.5) {
throw new RuntimeException("接口2调用失败");
}
return "result2";
});
CompletableFuture<String> future3 = CompletableFuture.supplyAsync(() -> {
// 调用接口3,返回结果
if (Math.random() > 0.5) {
throw new RuntimeException("接口3调用失败");
}
return "result3";
});
// 处理异常情况
future1.exceptionally(ex -> {
System.out.println("接口1调用出现异常:" + ex.getMessage());
return "default value1";
});
future2.exceptionally(ex -> {
System.out.println("接口2调用出现异常:" + ex.getMessage());
return "default value2";
});
future3.exceptionally(ex -> {
System.out.println("接口3调用出现异常:" + ex.getMessage());
return "default value3";
});
// 等待所有异步调用完成,再获取结果
CompletableFuture.allOf(future1, future2, future3)
.thenRun(() -> {
// 打印结果
System.out.println(future1.join());
System.out.println(future2.join());
System.out.println(future3.join());
});
```
在这个例子中,我们创建了三个 CompletableFuture 对象,分别对应三个异步调用。在每个 CompletableFuture 对象上都使用了 exceptionally() 方法,处理可能出现的异常情况。在最后,我们使用 CompletableFuture.allOf() 方法等待所有异步调用完成,然后使用 CompletableFuture.join() 方法获取它们的结果。如果某个异步调用失败了,我们使用 exceptionally() 方法返回一个默认值。需要注意的是,在使用 exceptionally() 方法后,我们仍然需要使用原始 CompletableFuture 对象的 join() 方法等待异步调用完成并获取结果。
阅读全文