MST
星途 面试题库

面试题:Java CompletableFuture链式调用异常处理后的恢复机制

假设在CompletableFuture链式调用中,一个任务抛出异常,如何在捕获异常后,让链式调用能够从某个特定的恢复点继续执行后续的操作?请编写一段完整的代码示例进行阐述。
26.7万 热度难度
编程语言Java

知识考点

AI 面试

面试题答案

一键面试
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方法捕获异常并返回一个新的值,后续的thenApplythenAccept方法基于这个恢复的值继续执行链式调用。