当前位置: 首页 > news >正文

Java 并发编程进阶:CompletableFuture 异步编程最佳实践

## 前言

 

CompletableFuture 是 Java 8 引入的强大异步编程工具,它实现了 Future 接口并支持流式调用。本文深入讲解 **CompletableFuture 的最佳实践**,帮助你构建高效异步应用。

 

---

 

## 一、CompletableFuture 基础

 

### 1.1 创建异步任务

 

```java

// 方式一:supplyAsync 有返回值

CompletableFuture<String> future = CompletableFuture.supplyAsync(() -> {

    return "Hello Async";

});

 

// 方式二:runAsync 无返回值

CompletableFuture<Void> future = CompletableFuture.runAsync(() -> {

    System.out.println("Running async");

});

```

 

### 1.3 thenApply vs thenApplyAsync

 

```java

// thenApply:使用同一线程执行

CompletableFuture<String> result = future.thenApply(s -> s + " World");

 

// thenApplyAsync:使用新线程执行(推荐)

CompletableFuture<String> result = future.thenApplyAsync(s -> s + " World");

```

 

---

 

## 二、组合异步任务

 

### 2.1 thenCompose 串联

 

```java

CompletableFuture<String> f1 = CompletableFuture

    .supplyAsync(() -> fetchUser())

    .thenCompose(user -> CompletableFuture.supplyAsync(() -> fetchOrders(user)));

```

 

### 2.2 thenCombine 并行

 

````java

CompletableFuture<User> userFuture = CompletableFuture.supplyAsync(this::getUser);

CompletableFuture<Order> orderFuture = CompletableFuture.supplyAsync(this::getOrder);

 

CompletableFuture<Result> result = userFuture

    .thenCombine(orderFuture, User::combineWidthOrder);

```

 

---

 

## 三、异常处理

 

### 3.1 exceptionally

 

```java

CompletableFuture<String> future = CompletableFuture

    .supplyAsync(() -> riskyOperation())

    .exceptionally(ex -> {

        log.error("Error: " + ex.getMessage());

        return "Default Value";

    });

```

 

### 3.2 handle - 无论成功失败都处理

 

````java

CompletableFuture<String> future = future

    .handle((result, ex) -> {

        if (ex != null) {

            return "Error: " + ex.getMessage();

        }

        return result;

    });

```

 

---

 

## 四、最佳实践

 

1. **使用自定义线程池**:避免使用默认的 ForkJoinPool

2. **合理使用 thenApplyAsync**:充分利用线程资源

3. **做好异常处理**:使用 handle 捕获所有异常

4. **避免 CompletableFuture 嵌套**:用 thenCompose 替代

 

---

 

> 想了解更多并发编程内容?可以查看我的系列文章《Java 并发编程实战》

 

祝编码愉快!

http://www.rkmt.cn/news/1305759.html

相关文章:

  • 合肥母婴除甲醛CMA甲醛检测治理公司哪家好权威机构 - 张诗林资源库
  • 合肥母婴除甲醛CMA甲醛检测治理公司推荐品牌排行榜 - 张诗林资源库
  • 揭阳母婴除甲醛CMA甲醛检测治理公司哪家好权威机构 - 张诗林资源库
  • 金华母婴除甲醛CMA甲醛检测治理公司哪家好权威机构 - 张诗林资源库
  • 东莞母婴除甲醛CMA甲醛检测治理公司多少钱怎么收费 - 张诗林资源库
  • 河源母婴除甲醛CMA甲醛检测治理公司推荐品牌排行榜 - 张诗林资源库
  • 2026年非标搅拌设备定制源头厂家推荐:综合实力测评发布,优质企业选型参考 - 品牌企业推荐师(官方)
  • 东营母婴除甲醛CMA甲醛检测治理公司多少钱怎么收费 - 张诗林资源库
  • 东营母婴除甲醛CMA甲醛检测治理公司哪家好权威机构 - 张诗林资源库
  • 2026年|留学生如何做到Turnitin检测0%?一键去AI痕迹的秘诀在这! - 降AI实验室
  • 南京工业大学浦江学院就业优势全景报告:产教融合筑根基、就业赋能启新程 - 寻茫精选
  • 2026年北美黑胡桃家具工厂,推荐一下北美黑胡桃家具厂,源头北美黑胡桃家具工厂 - 品牌推广大师
  • C++ 容器常见问题:emplace_back、push_back、reserve、resize 的区别
  • 2026年论文降AI率教程:专家亲授的去AI痕迹技巧 - 降AI实验室
  • 5.12 vue工程化
  • 跑了6家嵌入式培训机构,说说我的真实感受(2026年)
  • 2026年4月优秀的双组份密封胶厂商口碑推荐,聚乙烯闭孔泡沫板/聚硫密封胶/钢边止水带,双组份密封胶品牌口碑推荐 - 品牌推荐师
  • 99.鄂尔多斯报考CPPM与SCMP,职场进阶优选众智商学院 - 众智商学院课程中心
  • 97.桂林报考CPPM与SCMP,职场进阶优选众智商学院 - 众智商学院课程中心
  • 服务器感染挖矿病毒后如何彻底清理定时任务与隐藏进程?
  • 96.阜阳报考CPPM与SCMP,职场进阶优选众智商学院 - 众智商学院课程中心
  • 长沙:报考中质协六西格玛黑带和绿带指定报考机构推荐 - 众智商学院课程中心
  • 2026年5月18日欧米茄售后服务中心最新电话地址查询 - 速递信息
  • 2026 太仓黄金回收门店测评|5 家主流门店硬核 PK,闲置金变现不踩坑 - 速递信息
  • 破解过流继电器校验低效难题:3P现场精准校验方法论如何保障机组安全? - 速递信息
  • 2026年国产雨鞋品牌推荐:不同场景高口碑高性价比雨鞋测评 - 速递信息
  • 2026宁波黄金回收实测:我跑了3家店,终于找到靠谱的 - 生活测评君
  • 2026年|论文查重2%但AI率爆表?全网最全降AI率保姆级指南 - 降AI实验室
  • 呼和浩特仓库货架选购指南:从市场格局到厂家深度解析 - 品牌推广大师
  • MewUI 项目:面向 NativeAOT 的超轻量级.NET GUI 架构、底层图形管线与性能演进