面试题答案
一键面试适用场景
- 异步任务异常处理:当使用
CompletableFuture
执行异步任务时,如果任务出现异常,exceptionally
方法可以方便地捕获并处理这个异常,而不需要在任务执行的代码块内部进行复杂的异常处理逻辑。 - 链式异步操作:在一系列链式的异步操作中,某个环节出现异常时,通过
exceptionally
可以优雅地处理异常,并返回一个默认值或者执行一些恢复操作,而不会中断整个链式操作。 - 容错处理:对于那些对结果有一定容错要求的业务,例如在获取数据时,如果远程服务偶尔出现故障,使用
exceptionally
可以返回本地缓存的数据或者默认数据,保证业务流程的基本可用。
示例代码
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException;
public class CompletableFutureExample {
public static void main(String[] args) {
CompletableFuture.supplyAsync(() -> {
// 模拟可能出现异常的异步任务
if (Math.random() > 0.5) {
throw new RuntimeException("模拟异常");
}
return "任务成功结果";
})
.exceptionally(ex -> {
System.out.println("捕获到异常: " + ex.getMessage());
// 返回默认值
return "默认值";
})
.thenAccept(System.out::println);
// 防止主线程退出
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
在上述代码中,supplyAsync
开启一个异步任务,该任务有一定概率抛出异常。exceptionally
方法捕获到异常后,打印异常信息并返回默认值。最后通过 thenAccept
打印最终结果。