异常处理方法

exceptionally

判断上一个任务执行时是否发生异常,如果是则就会执行 exceptionally 方法,并且将上一步异常作为当前方法的参数,然后对异常进行处理。当然,如果上一阶段执行过程中没有出现异常,则不会执行 exceptionally 方法。

// 执行 CompletableFuture 串行任务,并且使用 exceptionally 方法:
// - 如果 exceptionally 方法的上一阶段执行过程中出现异常,则会执行 exceptionally 阶段;
// - 如果 exceptionally 方法的上一阶段执行过程中没有出现异常,则不会执行 exceptionally 阶段;
CompletableFuture<String> cf = CompletableFuture
        // 执行任务,50%概率发生异常,50%概率返回正常值
        .supplyAsync(() -> {
            if (new Random().nextInt(2) != 0) {
                throw new RuntimeException("模拟发生异常");
            }
            return "正常结束";
        })
        // 处理上一步中抛出的异常
        .exceptionally(Throwable::getMessage);
// 调用 get 方法进行等待,获取执行结果
String result = cf.get();
System.out.println(result);

最后更新于

这有帮助吗?