CompletableFuture 异常处理
时间: 2023-07-20 10:25:21 浏览: 90
CompletableFuture 提供了多种异常处理的方法,以下是一些常用的方法:
1. exceptionally():在 CompletableFuture 抛出异常时,可以使用 exceptionally() 方法来处理异常。该方法接受一个 Function 参数,该参数会在 CompletableFuture 抛出异常时被调用,返回一个新的 CompletableFuture 对象。
示例:
```
CompletableFuture<Integer> future = CompletableFuture.supplyAsync(() -> {
throw new RuntimeException("exception message");
});
CompletableFuture<Integer> result = future.exceptionally(ex -> {
System.out.println("exception message: " + ex.getMessage());
return 0;
});
System.out.println(result.join()); // 输出:0
```
2. handle():handle() 方法与 exceptionally() 方法类似,但它可以处理正常结果和异常结果。该方法接受一个 BiFunction 参数,该参数会在 CompletableFuture 完成时被调用,返回一个新的 CompletableFuture 对象。
示例:
```
CompletableFuture<Integer> future = CompletableFuture.supplyAsync(() -> {
throw new RuntimeException("exception message");
});
CompletableFuture<Integer> result = future.handle((res, ex) -> {
if (ex != null) {
System.out.println("exception message: " + ex.getMessage());
return 0;
} else {
return res;
}
});
System.out.println(result.join()); // 输出:0
```
3. whenComplete():whenComplete() 方法也可以处理正常结果和异常结果,但它没有返回值。该方法接受一个 BiConsumer 参数,该参数会在 CompletableFuture 完成时被调用。
示例:
```
CompletableFuture<Integer> future = CompletableFuture.supplyAsync(() -> {
throw new RuntimeException("exception message");
});
future.whenComplete((res, ex) -> {
if (ex != null) {
System.out.println("exception message: " + ex.getMessage());
} else {
System.out.println("result: " + res);
}
});
```
4. exceptionallyCompose():exceptionallyCompose() 方法与 exceptionally() 方法类似,但它可以返回一个新的 CompletableFuture 对象。该方法接受一个 Function 参数,该参数会在 CompletableFuture 抛出异常时被调用,返回一个新的 CompletableFuture 对象。
示例:
```
CompletableFuture<Integer> future = CompletableFuture.supplyAsync(() -> {
throw new RuntimeException("exception message");
});
CompletableFuture<Integer> result = future.exceptionallyCompose(ex -> {
System.out.println("exception message: " + ex.getMessage());
return CompletableFuture.completedFuture(0);
});
System.out.println(result.join()); // 输出:0
```
以上是 CompletableFuture 常用的异常处理方法,可以根据实际需求选择适合的方法。
阅读全文