Java CompletableFuture实战:异步编程与多任务编排 | Java并发编程进阶

2025-07-11 0 451

Java CompletableFuture实战:异步编程多任务编排

在现代Java应用中,异步编程已成为提升性能的关键技术。本文将深入探讨Java 8引入的CompletableFuture类,展示如何优雅地处理异步任务和多任务编排。

1. 基础异步任务创建

创建并运行一个简单的异步任务:

// 创建异步任务
CompletableFuture<String> future = CompletableFuture.supplyAsync(() -> {
try {
Thread.sleep(1000); // 模拟耗时操作
} catch (InterruptedException e) {
e.printStackTrace();
}
return “任务完成”;
});

// 异步获取结果
future.thenAccept(result -> System.out.println(“结果: ” + result));

2. 多任务组合编排

实现任务A和任务B并行执行,任务C依赖前两个任务的结果:

// 模拟获取用户信息
CompletableFuture<String> userFuture = CompletableFuture.supplyAsync(() -> {
return “用户ID:123”;
});

// 模拟获取订单信息
CompletableFuture<String> orderFuture = CompletableFuture.supplyAsync(() -> {
return “订单ID:456”;
});

// 组合两个任务结果
CompletableFuture<String> combinedFuture =
userFuture.thenCombine(orderFuture, (user, order) -> {
return “合并结果: ” + user + “, ” + order;
});

// 处理最终结果
combinedFuture.thenAccept(System.out::println);

3. 异常处理机制

CompletableFuture提供了多种异常处理方式:

CompletableFuture.supplyAsync(() -> {
if (Math.random() > 0.5) {
throw new RuntimeException(“模拟异常”);
}
return “成功结果”;
}).handle((result, ex) -> {
if (ex != null) {
return “异常处理: ” + ex.getMessage();
}
return result;
}).thenAccept(System.out::println);
最佳实践: 对于IO密集型任务,建议自定义线程池而不是使用默认的ForkJoinPool,避免资源竞争。

4. 实际应用案例

电商系统中的商品详情页数据聚合:

// 1. 获取基础商品信息
CompletableFuture<Product> productFuture = CompletableFuture.supplyAsync(
() -> productService.getProduct(id), ioThreadPool);

// 2. 并行获取商品评价
CompletableFuture<List<Review>> reviewsFuture = CompletableFuture.supplyAsync(
() -> reviewService.getReviews(id), ioThreadPool);

// 3. 并行获取推荐商品
CompletableFuture<List<Product>> recommendsFuture = CompletableFuture.supplyAsync(
() -> recommendService.getRecommends(id), ioThreadPool);

// 组合所有结果
CompletableFuture<ProductDetail> detailFuture =
productFuture.thenCombine(reviewsFuture, (product, reviews) -> {
ProductDetail detail = new ProductDetail();
detail.setProduct(product);
detail.setReviews(reviews);
return detail;
}).thenCombine(recommendsFuture, (detail, recommends) -> {
detail.setRecommends(recommends);
return detail;
});

// 返回结果或进一步处理
return detailFuture;

通过CompletableFuture,我们可以轻松实现复杂的异步编程场景,大幅提升Java应用的并发性能和响应速度。

Java CompletableFuture实战:异步编程与多任务编排 | Java并发编程进阶
收藏 (0) 打赏

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

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

淘吗网 java Java CompletableFuture实战:异步编程与多任务编排 | Java并发编程进阶 https://www.taomawang.com/server/java/199.html

常见问题

相关文章

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

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