跳到主要内容

JEP 266:更多的并发更新

QWen Max 中英对照

概述

一个可互操作的发布-订阅框架、对 CompletableFuture API 的增强,以及各种其他改进。

动机

应用程序中对并发和并行的使用不断演变,这就要求库支持也要不断演变。

描述

  1. 支持 Reactive Streams 发布-订阅框架的接口,嵌套在新类 Flow 中。Publisher 生产的项目由一个或多个 Subscriber 消费,每个 Subscriber 都由一个 Subscription 管理。通信依赖于一种简单的流控制形式(方法 Subscription.request,用于传递反向压力),这可以用来避免基于“推送”的系统中可能出现的资源管理问题。提供了一个实用类 SubmissionPublisher,开发人员可以使用它来创建自定义组件。
    这些(非常小的)接口对应于由 Reactive Streams 倡议广泛参与定义的接口,并支持跨多个运行在 JVM 上的异步系统的互操作性。将接口嵌套在类中是一种保守的策略,允许它们在各种短期和长期的可能性中使用。目前没有计划提供基于网络或 I/O 的 java.util.concurrent 组件用于分布式消息传递,但未来 JDK 版本可能会在其他包中包含此类 API。

  2. CompletableFuture API 的增强

    • 添加了基于时间的增强功能,使 future 在一定持续时间后能够以值或异常完成,参见方法 orTimeoutcompleteTimeout。此外,由名为 delayedExecutor 的静态方法返回的互补 Executor 允许任务在一定持续时间后执行。这可以与 CompletableFuture 上接收 Executor 的方法结合使用,以支持带有时间延迟的操作。
    • 添加了子类增强功能,使得从 CompletableFuture 扩展更加容易,例如提供一个支持替代默认执行器的子类。
  3. 自 JDK 8 以来积累的大量实现改进;其中许多改进很小,但有些包括 Javadoc 规范的措辞修改。

测试

JSR 166 EG 的持续成员集合为所有组件提供功能、TCK 和性能测试。

风险与假设

将注意确保 JDK 9 代码库与 166 代码库之间保留任何小的但必需的代码差异。