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 @@
-👉 `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
💗.