学习 JDK CompletableFeature API的案例;
包含各种API的使用场景案例和解释说明;

yangyi 99b31a568a docs:新增 README 项目说明 1 Minggu lalu
src 8ba6e209bb extend Cf08:补 isDone/obtrudeException 用法 1 Minggu lalu
.gitignore 6dd74f6b10 init 1 Minggu lalu
AGENTS.md 4bef16e36f docs:AGENTS.md 更新 Cf01..Cf10 及 orTimeout+exec:java 坑点 1 Minggu lalu
README.md 99b31a568a docs:新增 README 项目说明 1 Minggu lalu
completablefuture-blog.md 93009a6c44 docs:blog 扩写实战案例并去除 AI 写作痕迹,更适合发布 1 Minggu lalu
completablefuture-tutorial.md 2fc22cdd6f docs:教程新增超时与异常链章节,补 orTimeout/completeOnTimeout/exceptionallyCompose 及速查表 1 Minggu lalu
pom.xml a1b4bf7279 description:增加项目描述 1 Minggu lalu
template.md 6dd74f6b10 init 1 Minggu lalu
todo.md a45e499b1c docs:更新AGENTS.md构建说明与结构;标记todo任务完成 1 Minggu lalu

README.md

CompletableFuture Demo

一个用于学习 JDK CompletableFuture API 的 Java 17 / Maven 教学项目,包含配套的中文教程文档与可直接运行的代码示例(Cf01..Cf10)。

技术栈

  • JDK 17
  • Maven(无第三方依赖,纯 JDK API)

目录结构

completableFeature-demo/
├── src/main/java/space/anyi/       # 示例代码,每个 API 主题一个文件,均有独立 main()
├── completablefuture-tutorial.md   # 中文教程文档(循序渐进,配合示例代码)
├── completablefuture-blog.md       # 面向资深 Java 程序员的速查/博客文档
├── template.md                     # 写作风格与结构参考文档
└── todo.md                         # 待办任务清单

示例代码一览

文件 主题
Cf01_CreateStage 创建异步任务:runAsync / supplyAsync / completedFuture / getNow
Cf02_ThenSeries 串行处理:thenApply / thenAccept / thenRun
Cf03_ThenCombine 组合两个任务:thenCombine / thenAcceptBoth / runAfterBoth
Cf04_ThenEither 二选一:applyToEither / acceptEither / runAfterEither
Cf05_ThenCompose 展平组合:thenCompose
Cf06_AllOfAnyOf 批量聚合:allOf / anyOf
Cf07_ExceptionHandling 异常处理:exceptionally / whenComplete / handle
Cf08_ManualComplete 手动完成与状态查询:complete / completeExceptionally / obtrudeValue / isDone / cancel
Cf09_CustomExecutor 线程池与 Async 变体
Cf10_TimeoutAndException 超时与异常链:orTimeout / completeOnTimeout / exceptionallyCompose

详细讲解见 completablefuture-tutorial.md

构建与运行

mvn compile                                   # 编译
mvn exec:java -Dexec.mainClass=space.anyi.Cf01_CreateStage   # 运行某个示例

注意事项

  • exec:java 需要显式指定 -Dexec.mainClass
  • Windows 下 PowerShell 会把未加引号的 -Dexec.mainClass=... 拆分,需要加引号:'-Dexec.mainClass=space.anyi.Cf01_CreateStage'
  • 控制台默认 GBK 编码,中文输出在终端可能乱码,程序本身是正确的。
  • Cf10(使用 orTimeout / completeOnTimeout)在 exec:java 下会因 JDK 延迟调度线程残留而报线程组清理错误,属误报。请改用普通方式运行:

    java -cp target/classes space.anyi.Cf10_TimeoutAndException