MST

星途 面试题库

面试题:Java中CompletableFuture的handle方法应用场景

请举例说明在Java的CompletableFuture中,handle方法适合用于哪些实际的业务场景,并编写一段简单代码展示其用法。
15.7万 热度难度
编程语言Java

知识考点

AI 面试

面试题答案

一键面试

适用场景

  1. 处理异步任务的成功和失败结果:当我们需要统一处理异步任务成功返回的结果以及失败时抛出的异常,可以使用handle方法。例如在一个电商系统中,异步查询商品库存,无论查询成功获取到库存数量还是因网络问题等失败,都需要返回给前端一个友好的提示信息。
  2. 链式调用中对中间结果的处理:在多个异步任务链式调用的场景下,对前一个任务结果进行处理,无论成功与否都继续执行后续操作。比如在用户注册流程中,先异步发送验证码,然后不管验证码发送成功与否,都要继续处理用户注册的其他逻辑。

代码示例

import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException;

public class CompletableFutureHandleExample {
    public static void main(String[] args) throws ExecutionException, InterruptedException {
        CompletableFuture.supplyAsync(() -> {
            // 模拟一个可能会失败的异步任务
            if (Math.random() < 0.5) {
                throw new RuntimeException("任务失败");
            }
            return "任务成功结果";
        }).handle((result, ex) -> {
            if (ex != null) {
                System.out.println("处理异常: " + ex.getMessage());
                return "默认结果";
            }
            System.out.println("处理成功结果: " + result);
            return result;
        }).thenAccept(System.out::println);

        // 主线程等待异步任务完成
        Thread.sleep(2000);
    }
}

在上述代码中:

  1. CompletableFuture.supplyAsync创建并启动一个异步任务,该任务可能成功返回一个字符串,也可能抛出异常。
  2. handle方法接收两个参数,result是异步任务成功时返回的结果,ex是异步任务失败时抛出的异常。在handle方法内部,根据ex是否为null来判断任务是否成功,并进行相应处理。
  3. thenAccept方法用于消费handle方法返回的最终结果。