Java并发编程实战:CompletableFuture异步编排深度解析

2025-07-11 0 104

Java并发编程实战:CompletableFuture异步编排深度解析

一、CompletableFuture核心优势

相比Future接口,CompletableFuture提供更强大的异步编程能力:

// 传统Future获取结果
ExecutorService executor = Executors.newFixedThreadPool(2);
Future<String> future = executor.submit(() -> {
    Thread.sleep(1000);
    return "结果";
});

// CompletableFuture实现
CompletableFuture<String> cf = CompletableFuture.supplyAsync(() -> {
    try {
        Thread.sleep(1000);
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
    return "结果";
}, executor);

核心特性:链式调用异常处理组合操作

二、任务编排四象限

1. 串行执行

CompletableFuture<String> cf = CompletableFuture
    .supplyAsync(() -> "Hello")
    .thenApply(s -> s + " World")
    .thenApply(String::toUpperCase);

System.out.println(cf.get()); // 输出: HELLO WORLD

2. 并行聚合

CompletableFuture<String> cf1 = queryFromDB();
CompletableFuture<String> cf2 = queryFromAPI();

CompletableFuture<String> result = cf1
    .thenCombine(cf2, (db, api) -> db + "|" + api);

三、电商订单实战案例

1. 多服务并行调用

public OrderResult getOrderDetail(Long orderId) {
    CompletableFuture<Order> orderFuture = getOrderAsync(orderId);
    CompletableFuture<User> userFuture = getUserAsync(orderId);
    CompletableFuture<List<Product>> productsFuture = getProductsAsync(orderId);

    return CompletableFuture.allOf(orderFuture, userFuture, productsFuture)
        .thenApply(v -> {
            Order order = orderFuture.join();
            User user = userFuture.join();
            List<Product> products = productsFuture.join();
            
            return new OrderResult(order, user, products);
        }).join();
}

四、性能优化策略

  • 自定义线程池:避免使用默认ForkJoinPool
  • 超时控制:orTimeout()方法设置超时
  • 异常隔离:handle()统一处理异常
  • 结果缓存:completeOnTimeout()设置默认值
// 带超时和异常处理的完整示例
CompletableFuture<String> cf = CompletableFuture
    .supplyAsync(() -> {
        if (Math.random() > 0.5) {
            throw new RuntimeException("模拟异常");
        }
        return "正常结果";
    }, customExecutor)
    .orTimeout(2, TimeUnit.SECONDS)
    .handle((res, ex) -> {
        if (ex != null) {
            return "异常默认值";
        }
        return res;
    });
Java并发编程实战:CompletableFuture异步编排深度解析
收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

淘吗网 java Java并发编程实战:CompletableFuture异步编排深度解析 https://www.taomawang.com/server/java/255.html

下一篇:

已经没有下一篇了!

常见问题

相关文章

发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务