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