Skip to content

JEP 266: More Concurrency Updates | 更多并发更新

摘要

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

动机

并发和并行应用程序的使用不断发展,需要持续改进库支持。

描述

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

  2. 增强 CompletableFuture API

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

测试

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

风险和假设

将注意确保 JDK 9 存储库和 166 存储库之间所需的任何差异(虽然很小)被保留。