面试题答案
一键面试在Java的CompletableFuture中,处理异步任务执行过程中抛出异常的基本方法有:
- exceptionally:当CompletableFuture的计算结果异常时,会执行该方法返回的备用计算结果。
CompletableFuture.supplyAsync(() -> { if (Math.random() < 0.5) { throw new RuntimeException("模拟异常"); } return "正常结果"; }).exceptionally(ex -> { System.out.println("捕获到异常: " + ex.getMessage()); return "异常时的备用结果"; }).thenAccept(System.out::println);
- whenComplete:无论CompletableFuture正常完成还是发生异常,都会执行该方法。它接收两个参数,第一个是正常的计算结果(如果有异常则为null),第二个是异常(如果正常完成则为null)。
CompletableFuture.supplyAsync(() -> { if (Math.random() < 0.5) { throw new RuntimeException("模拟异常"); } return "正常结果"; }).whenComplete((result, ex) -> { if (ex != null) { System.out.println("捕获到异常: " + ex.getMessage()); } else { System.out.println("正常结果: " + result); } });
- handle:结合了正常计算结果处理和异常处理,返回一个新的CompletableFuture。它接收两个参数,第一个是正常的计算结果(如果有异常则为null),第二个是异常(如果正常完成则为null),返回值可以作为新的CompletableFuture的计算结果。
CompletableFuture.supplyAsync(() -> { if (Math.random() < 0.5) { throw new RuntimeException("模拟异常"); } return "正常结果"; }).handle((result, ex) -> { if (ex != null) { System.out.println("捕获到异常: " + ex.getMessage()); return "异常时的备用结果"; } else { System.out.println("正常结果: " + result); return result; } }).thenAccept(System.out::println);