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