JEP 266:更多的并发更新
概述
一个可互操作的发布-订阅框架、对 CompletableFuture
API 的增强,以及各种其他改进。
动机
应用程序中对并发和并行的使用不断演变,这就要求库支持也要不断演变。
描述
-
支持 Reactive Streams 发布-订阅框架的接口,嵌套在新类
Flow
中。Publisher
生产的项目由一个或多个Subscriber
消费,每个Subscriber
都由一个Subscription
管理。通信依赖于一种简单的流控制形式(方法Subscription.request
,用于传递反向压力),这可以用来避免基于“推送”的系统中可能出现的资源管理问题。提供了一个实用类SubmissionPublisher
,开发人员可以使用它来创建自定义组件。
这些(非常小的)接口对应于由 Reactive Streams 倡议广泛参与定义的接口,并支持跨多个运行在 JVM 上的异步系统的互操作性。将接口嵌套在类中是一种保守的策略,允许它们在各种短期和长期的可能性中使用。目前没有计划提供基于网络或 I/O 的java.util.concurrent
组件用于分布式消息传递,但未来 JDK 版本可能会在其他包中包含此类 API。 -
对
CompletableFuture
API 的增强- 添加了基于时间的增强功能,使 future 在一定持续时间后能够以值或异常完成,参见方法
orTimeout
和completeTimeout
。此外,由名为delayedExecutor
的静态方法返回的互补Executor
允许任务在一定持续时间后执行。这可以与CompletableFuture
上接收Executor
的方法结合使用,以支持带有时间延迟的操作。 - 添加了子类增强功能,使得从
CompletableFuture
扩展更加容易,例如提供一个支持替代默认执行器的子类。
- 添加了基于时间的增强功能,使 future 在一定持续时间后能够以值或异常完成,参见方法
-
自 JDK 8 以来积累的大量实现改进;其中许多改进很小,但有些包括 Javadoc 规范的措辞修改。
测试
JSR 166 EG 的持续成员集合为所有组件提供功能、TCK 和性能测试。
风险与假设
将注意确保 JDK 9 代码库与 166 代码库之间保留任何小的但必需的代码差异。