Prechádzať zdrojové kódy

docs:新增 README 项目说明

yangyi 1 týždeň pred
rodič
commit
99b31a568a
1 zmenil súbory, kde vykonal 54 pridanie a 0 odobranie
  1. 54 0
      README.md

+ 54 - 0
README.md

@@ -0,0 +1,54 @@
+# 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`。
+
+## 构建与运行
+
+```bash
+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 延迟调度线程残留而报线程组清理错误,属误报。请改用普通方式运行:
+
+```bash
+java -cp target/classes space.anyi.Cf10_TimeoutAndException
+```