diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 65f57421..a5cefcfc 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -37,15 +37,10 @@ jobs: with: java-version: 19 distribution: temurin - - name: setup Java 20 - uses: actions/setup-java@v3 - with: - java-version: 20 - distribution: zulu - name: setup Java 21 uses: actions/setup-java@v3 with: - java-version: 21-ea + java-version: 21 distribution: zulu - name: run integration test @@ -55,7 +50,6 @@ jobs: JAVA11_HOME: ${{ env.JAVA_HOME_11_X64 }} JAVA17_HOME: ${{ env.JAVA_HOME_17_X64 }} JAVA19_HOME: ${{ env.JAVA_HOME_19_X64 }} - JAVA20_HOME: ${{ env.JAVA_HOME_20_X64 }} JAVA21_HOME: ${{ env.JAVA_HOME_21_X64 }} - name: remove self maven install files diff --git a/README.md b/README.md index d8e9d84d..e2f3ea5c 100644 --- a/README.md +++ b/README.md @@ -25,7 +25,7 @@ gitpod: Ready to Code

-👉 `cffu`(`CompletableFuture Fu` 🦝)是一个小小的[`CompletableFuture(CF)`](https://docs.oracle.com/en/java/javase/20/docs/api/java.base/java/util/concurrent/CompletableFuture.html)辅助增强库,提升`CF`使用体验并减少误用,期望在业务中更方便高效安全地使用`CF`。 +👉 `cffu`(`CompletableFuture Fu` 🦝)是一个小小的[`CompletableFuture(CF)`](https://docs.oracle.com/en/java/javase/21/docs/api/java.base/java/util/concurrent/CompletableFuture.html)辅助增强库,提升`CF`使用体验并减少误用,期望在业务中更方便高效安全地使用`CF`。 欢迎 👏 💖 @@ -97,14 +97,14 @@ > 并发工具、框架的广度了解,可以看看如《[七周七并发模型](https://book.douban.com/subject/26337939/)》、《[Java虚拟机并发编程](https://book.douban.com/subject/24533312/)》、《[Scala并发编程(第2版)](https://book.douban.com/subject/35448965/)》;更多关于并发主题的书籍参见[书单](https://www.douban.com/doulist/41916951/)。 -其中[`CompletableFuture(CF)`](https://docs.oracle.com/en/java/javase/20/docs/api/java.base/java/util/concurrent/CompletableFuture.html)有其优点: +其中[`CompletableFuture(CF)`](https://docs.oracle.com/en/java/javase/21/docs/api/java.base/java/util/concurrent/CompletableFuture.html)有其优点: - **`Java`标准库内置** - 无需额外依赖,几乎总是可用 - 相信有极高的实现质量 - **广为人知广泛使用,有一流的群众基础** - `CompletableFuture`在2014年发布的`Java 8`提供,有~10年了 - - `CompletableFuture`的父接口[`Future`](https://docs.oracle.com/en/java/javase/20/docs/api/java.base/java/util/concurrent/Future.html)早在2004年发布的`Java 5`中提供,有~20年了 + - `CompletableFuture`的父接口[`Future`](https://docs.oracle.com/en/java/javase/21/docs/api/java.base/java/util/concurrent/Future.html)早在2004年发布的`Java 5`中提供,有~20年了 - 虽然`Future`接口不支持 执行结果的异步获取与并发执行逻辑的编排,但也让广大`Java`开发者熟悉了`Future`这个典型的概念与工具 - **功能强大、但不会非常庞大复杂** - 足以应对日常的业务需求开发 @@ -112,7 +112,7 @@ - 当然基本的并发关注方面及其复杂性,与具体使用哪个工具无关,都是要理解与注意的 - **高层抽象** - 或说 以业务流程的形式表达技术的并发流程 - - 可以不使用繁琐易错的基础并发协调工具,如[`CountDownLatch`](https://docs.oracle.com/en/java/javase/20/docs/api/java.base/java/util/concurrent/CountDownLatch.html)、锁([`Lock`](https://docs.oracle.com/en/java/javase/20/docs/api/java.base/java/util/concurrent/locks/package-summary.html))、信号量([`Semaphore`](https://docs.oracle.com/en/java/javase/20/docs/api/java.base/java/util/concurrent/Semaphore.html)) + - 可以不使用繁琐易错的基础并发协调工具,如[`CountDownLatch`](https://docs.oracle.com/en/java/javase/21/docs/api/java.base/java/util/concurrent/CountDownLatch.html)、锁([`Lock`](https://docs.oracle.com/en/java/javase/21/docs/api/java.base/java/util/concurrent/locks/package-summary.html))、信号量([`Semaphore`](https://docs.oracle.com/en/java/javase/21/docs/api/java.base/java/util/concurrent/Semaphore.html)) 和其它并发工具、框架一样,`CompletableFuture`用于 @@ -558,7 +558,7 @@ public class ConcurrencyStrategyDemo { > 可以在 [central.sonatype.com](https://central.sonatype.com/artifact/io.foldright/cffu/0.9.0/versions) 查看最新版本与可用版本列表。 -- `cffu`库(包含[`Java CompletableFuture`](https://docs.oracle.com/en/java/javase/20/docs/api/java.base/java/util/concurrent/CompletableFuture.html)的增强`CompletableFutureUtils`): +- `cffu`库(包含[`Java CompletableFuture`](https://docs.oracle.com/en/java/javase/21/docs/api/java.base/java/util/concurrent/CompletableFuture.html)的增强`CompletableFutureUtils`): - For `Maven` projects: ```xml @@ -645,8 +645,8 @@ public class ConcurrencyStrategyDemo { # 📚 更多资料 - 官方资料 - - [`CompletionStage` JavaDoc](https://docs.oracle.com/en/java/javase/20/docs/api/java.base/java/util/concurrent/CompletionStage.html) - - [`CompletableFuture` JavaDoc](https://docs.oracle.com/en/java/javase/20/docs/api/java.base/java/util/concurrent/CompletableFuture.html) + - [`CompletionStage` JavaDoc](https://docs.oracle.com/en/java/javase/21/docs/api/java.base/java/util/concurrent/CompletionStage.html) + - [`CompletableFuture` JavaDoc](https://docs.oracle.com/en/java/javase/21/docs/api/java.base/java/util/concurrent/CompletableFuture.html) - [`CompletableFuture` Guide](docs/completable-future-guide.md) - 完备说明`CompletableFuture`的使用方式 - 给出 最佳实践建议 与 使用陷阱注意 diff --git a/cffu-kotlin/pom.xml b/cffu-kotlin/pom.xml index f7419e6d..5c383cfa 100644 --- a/cffu-kotlin/pom.xml +++ b/cffu-kotlin/pom.xml @@ -149,7 +149,7 @@ file://${javadoc.package.list.dir}/jsr305/package-list - https://docs.oracle.com/en/java/javase/20/docs/api/java.base/ + https://docs.oracle.com/en/java/javase/21/docs/api/java.base/ file://${javadoc.package.list.dir}/java/package-list diff --git a/demos/scripts/integration_test b/demos/scripts/integration_test index b2bc4e51..869d755e 100755 --- a/demos/scripts/integration_test +++ b/demos/scripts/integration_test @@ -12,7 +12,7 @@ readonly JDK_VERSIONS=( 8 11 17 - 20 + 21 ) for jdk_version in "${JDK_VERSIONS[@]}"; do diff --git a/docs/cf-functions-intro.md b/docs/cf-functions-intro.md index 9a554391..38577698 100644 --- a/docs/cf-functions-intro.md +++ b/docs/cf-functions-intro.md @@ -85,7 +85,7 @@ - 这2个方法是在组合输入的多个`CF`的结果,本身复杂业务执行逻辑,逻辑简单无阻塞,所以无需`Executor`。 - 这2个方法所返回的`CF`,在结果获取上,有不方便的地方: 😔 - 对于`allOf`方法,返回`CF`结果是`Void`即无内容,并没有持有多个输入`CF`的结果 - - [`allOf`方法的文档](https://docs.oracle.com/en/java/javase/20/docs/api/java.base/java/util/concurrent/CompletableFuture.html#allOf(java.util.concurrent.CompletableFuture...))给的解决方法是,再通过调用各个输入`CF`的结果读取方法(如`join()`)来获得: + - [`allOf`方法的文档](https://docs.oracle.com/en/java/javase/21/docs/api/java.base/java/util/concurrent/CompletableFuture.html#allOf(java.util.concurrent.CompletableFuture...))给的解决方法是,再通过调用各个输入`CF`的结果读取方法(如`join()`)来获得: - > the results of the given CompletableFutures are not reflected in the returned CompletableFuture, but may be obtained by inspecting them individually. - 对于`anyOf`方法,返回`CF`结果类型是`Object`,要使用这个结果一定要做强制类型转换 - > 这些不方便的地方,在`cffu`库中,提供了对应的加强解决 💗 diff --git a/docs/completable-future-guide.md b/docs/completable-future-guide.md index d1769044..50e2e383 100644 --- a/docs/completable-future-guide.md +++ b/docs/completable-future-guide.md @@ -65,7 +65,7 @@ - 在概念上`CF`的状态转变只能是单次单向的,这很简单可靠、也容易理解并和使用直觉一致。 - > 注:虽然下文提到的`obtrudeValue()`/`obtrudeException`方法可以突破`CF`概念上的约定,但这2个后门方法在正常设计实现中不应该会用到,尤其在业务使用应该完全忽略;带来的问题也由使用者自己了解清楚并注意。 - 〚2〛 关于「取消」状态: - - 对于`CompletableFuture`,取消的实现方式是设置[`CancellationException`](https://docs.oracle.com/en/java/javase/20/docs/api/java.base/java/util/concurrent/CancellationException.html)异常。 + - 对于`CompletableFuture`,取消的实现方式是设置[`CancellationException`](https://docs.oracle.com/en/java/javase/21/docs/api/java.base/java/util/concurrent/CancellationException.html)异常。 - 对于「取消」状态,或说设置了「`CancellationException`」失败异常的`CompletableFuture cf`,相比其它异常失败 / 设置了其它失败异常 的情况,不一样的地方: - 调用`cf.get()` / `cf.get(timeout, unit)`方法 - 会抛出`CancellationException`异常 @@ -111,11 +111,11 @@ - **无输入无返回(00)** - 对应`Runnable`接口(包含单个`run`方法) - **无输入有返回(01)** - - 对应[`Supplier`](https://docs.oracle.com/en/java/javase/20/docs/api/java.base/java/util/function/Supplier.html)接口(包含单个`supply`方法) + - 对应[`Supplier`](https://docs.oracle.com/en/java/javase/21/docs/api/java.base/java/util/function/Supplier.html)接口(包含单个`supply`方法) - **有输入无返回(10)** - - 对应[`Consumer`](https://docs.oracle.com/en/java/javase/20/docs/api/java.base/java/util/function/Consumer.html)接口(包含单个`accept`方法) + - 对应[`Consumer`](https://docs.oracle.com/en/java/javase/21/docs/api/java.base/java/util/function/Consumer.html)接口(包含单个`accept`方法) - **有输入有返回(11)** - - 对应[`Function`](https://docs.oracle.com/en/java/javase/20/docs/api/java.base/java/util/function/Function.html)接口(包含单个`apply`方法) + - 对应[`Function`](https://docs.oracle.com/en/java/javase/21/docs/api/java.base/java/util/function/Function.html)接口(包含单个`apply`方法) 注: @@ -124,8 +124,8 @@ - 都是处理单个输入数据 - 如果要处理两个输入数据,即有两个上游`CF`的返回,会涉及下面的变体接口 - 对于有输入接口,有两个输入参数的变体接口: - - `Consumer`接口的两参数变体接口:[`BiConsumer`](https://docs.oracle.com/en/java/javase/20/docs/api/java.base/java/util/function/BiConsumer.html) - - `Function`接口的两参数变体接口:[`BiFunction`](https://docs.oracle.com/en/java/javase/20/docs/api/java.base/java/util/function/BiFunction.html) + - `Consumer`接口的两参数变体接口:[`BiConsumer`](https://docs.oracle.com/en/java/javase/21/docs/api/java.base/java/util/function/BiConsumer.html) + - `Function`接口的两参数变体接口:[`BiFunction`](https://docs.oracle.com/en/java/javase/21/docs/api/java.base/java/util/function/BiFunction.html) ---------------------------------------- diff --git a/pom.xml b/pom.xml index 84b40a15..53238bf1 100644 --- a/pom.xml +++ b/pom.xml @@ -584,7 +584,7 @@ ${javadoc.package.list.dir}/jsr305/ -linkoffline - https://docs.oracle.com/en/java/javase/20/docs/api/java.base/ + https://docs.oracle.com/en/java/javase/21/docs/api/java.base/ ${javadoc.package.list.dir}/java/ diff --git a/scripts/integration_test b/scripts/integration_test index b10f7e8c..a3e8b9fe 100755 --- a/scripts/integration_test +++ b/scripts/integration_test @@ -20,7 +20,6 @@ readonly JDK_VERSIONS=( 11 17 "$default_build_jdk_version" - 20 21 ) diff --git a/src/main/javadoc/overview.html b/src/main/javadoc/overview.html index 03409b7b..52abd0e8 100644 --- a/src/main/javadoc/overview.html +++ b/src/main/javadoc/overview.html @@ -4,7 +4,7 @@ 🦝 Java CompletableFuture Fu(aka. CF-Fu, pronounced "Shifu"), a tiny sidekick library for - CompletableFuture + CompletableFuture to improve user experience and reduce misuse.

The CF-Fu GitHub repo also include the best practice/traps guide 📚 for CompletableFuture 💗.