面试题答案
一键面试import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException;
public class CompletableFutureExceptionRecovery {
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 "从异常恢复后的值";
})
.thenApply(result -> {
System.out.println("继续执行后续操作,结果: " + result);
return result + " 后续处理";
})
.thenAccept(System.out::println)
.join();
}
}
上述代码实现了在CompletableFuture
链式调用中捕获异常,并从异常处恢复继续执行后续操作。supplyAsync
方法开始异步任务,若任务抛出异常,exceptionally
方法捕获异常并返回一个新的值,后续的thenApply
和thenAccept
方法基于这个恢复的值继续执行链式调用。