跳到主要内容

JEP 266:更多并发更新

概括

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

动机

应用程序中并发性和并行性使用的不断发展需要库支持的不断发展。

描述

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

  2. CompletableFutureAPI的增强

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

测试

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

风险和假设

我们将注意确保保留 JDK 9 存储库和 166 存储库之间代码中任何微小但必需的差异。