面试题答案
一键面试以下是使用CompletableFuture
处理异常并添加回调操作的代码示例:
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(result -> {
System.out.println("回调操作: " + result);
});
// 主线程等待所有异步任务完成
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
- 异常处理:使用
exceptionally
方法捕获异步任务中的异常。在exceptionally
的回调函数中,可以对异常进行处理,并返回一个默认值或进行其他操作。 - 回调操作:使用
thenAccept
方法在任务完成(无论是正常完成还是异常完成)后添加回调操作。thenAccept
的回调函数接收任务的结果(如果任务正常完成)或exceptionally
返回的默认值(如果任务异常完成),并执行特定逻辑。
在上述示例中,supplyAsync
方法启动一个异步任务。如果任务抛出异常,exceptionally
捕获异常并输出异常信息,同时返回默认值。然后thenAccept
接收任务结果或默认值并执行回调逻辑。为了确保主线程等待异步任务完成,使用Thread.sleep
方法暂停主线程2秒。实际应用中,可以根据需求采用更合适的方式确保异步任务执行完毕。