内容提要
JEP 525 完成了即将发布的 JDK 26 的结构化并发第六次预览,旨在简化并发任务管理。新版本引入超时处理和自定义连接器,允许在超时情况下返回部分结果,同时对 API 进行了小幅改进,保持核心模型稳定,增强了相关任务的管理。
关键要点
-
JEP 525 完成了即将发布的 JDK 26 的结构化并发第六次预览,旨在简化并发任务管理。
-
新版本引入超时处理和自定义连接器,允许在超时情况下返回部分结果。
-
结构化并发将相关任务视为一个工作单元,改善了取消、错误传播和可观察性。
-
API 以 java.util.concurrent.StructuredTaskScope 和 Joiner 抽象为中心,控制如何组合从分叉子任务中获得的结果。
-
第六次预览专注于对 API 的小幅改进,而核心模型保持稳定。
-
新版本的 Joiner 提供了 onTimeout() 回调,允许自定义连接器在超时情况下处理结果。
-
Joiner.allSuccessfulOrThrow() 现在直接从 scope.join() 返回 List<T>,减少了常见用例的样板代码。
-
anySuccessfulResultOrThrow() 被重命名为 anySuccessfulOrThrow(),以提高简洁性和清晰度。
-
StructuredTaskScope.open() 的重载现在期望 UnaryOperator<Configuration>,以防止类型混合。
-
基本使用模式保持不变,确保所有子任务在块退出时完成或取消。
-
自定义连接器可以在超时情况下处理并返回部分结果,而不是抛出异常。
-
第六次预览没有显著改变 API,而是专注于减少摩擦和提高灵活性。
-
结构化并发是 Project Loom 更广泛并发路线图的关键组成部分。
-
开发者可以通过启用预览功能在 JDK 26 早期访问版本中实验结构化并发。
延伸问答
JEP 525 的主要目标是什么?
JEP 525 的主要目标是简化并发任务管理,改善取消、错误传播和可观察性。
JEP 525 引入了哪些新特性?
JEP 525 引入了超时处理和自定义连接器,允许在超时情况下返回部分结果。
如何使用 JEP 525 中的自定义连接器?
可以通过实现 Joiner 接口并重写 onTimeout() 方法来创建自定义连接器,以处理超时情况并返回部分结果。
JEP 525 对 API 有哪些具体改进?
API 进行了小幅改进,如 Joiner.allSuccessfulOrThrow() 直接返回 List<T>,并且 anySuccessfulResultOrThrow() 被重命名为 anySuccessfulOrThrow()。
结构化并发如何处理超时?
结构化并发通过在 Joiner 中引入 onTimeout() 回调,允许自定义连接器在超时情况下处理并返回部分结果,而不是抛出异常。
开发者如何在 JDK 26 中实验结构化并发?
开发者可以通过在 JDK 26 的早期访问版本中启用预览功能(--enable-preview)来实验结构化并发。