面试题答案
一键面试在CompletableFuture链式调用中,可以使用exceptionally
方法优雅地处理异常,确保整个链式调用流程不会中断,并将异常信息传递到合适的处理环节。以下是代码示例:
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException;
public class CompletableFutureExceptionHandling {
public static void main(String[] args) {
CompletableFuture.supplyAsync(() -> {
if (Math.random() < 0.5) {
throw new RuntimeException("模拟异步操作抛出异常");
}
return "异步操作正常结果";
})
.thenApply(result -> {
System.out.println("处理正常结果: " + result);
return result.toUpperCase();
})
.exceptionally(ex -> {
System.out.println("捕获到异常: " + ex.getMessage());
return "默认结果";
})
.thenAccept(finalResult -> System.out.println("最终结果: " + finalResult));
// 防止主线程退出
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
在上述代码中:
supplyAsync
开启一个异步操作,这个操作可能会抛出异常。thenApply
用于处理异步操作的正常结果。exceptionally
捕获前面异步操作中抛出的异常,打印异常信息,并返回一个默认结果,保证链式调用不会中断。thenAccept
处理最终结果,无论是正常结果还是异常处理后的默认结果。