Java 9的这一基本功能,你可能从未听过
2017 年 7 月即将发布的 Java 9 将会新增和修订不少功能和特性。在搜索 JDK 增强提议(JEP)时发现,JEP 266 对 CompletableFuture 进行了一些有趣的改进,更新并发功能和支持 Reactive Streams。
本文的焦点就是 JEP 266 的改进和一些有趣的特性,它极有可能成为 Java 9 中最常用的特性之一。
JEP 266 改进计划 JEP 266 是 Oracle 草拟 JDK 增强协议里面的一员,其中对并发进行了大量的更新。根据提案,将要进行更新的特性有:
- 支持 Reactive Streams 发布-订阅框架接口
- 对 CompletableFuture API 进行更新,例如支持延迟、超时、子类化和其它方法
- 其它一般改进,例如小调整和 javadoc 规范重写
本文重点关注前两个改进。首先,Java 9 将支持 Reactive Streams,这是一个来自 Java 社区的改进计划,旨在改进开发人员的并发工作流程。其次是 CompletableFuture API 提供的几个 fixer-uppers,可以让开发人员回到 Future<T>。
Flow 类 Reactive Streams 发布-订阅框架里面将嵌套一个 Flow 类,以及开发人员可以用来创建自定义组件使用的 SubmissionPublisher。
先从最上面的说起,Reactive Streams 主要解决背压(back-pressure)问题。当传入的任务速率大于系统处理能力时,数据处理将会对未处理数据产生一个缓冲区。
与此同时,我们还与 Akka 团队的高级开发人员 Konrad Malawski 进行了沟通,他是 Reactive Streams 计划的领导者,解释了 Reactive Streams 的重要性以及如何使用。
Oracle 指出,新的增强将包括“一个很小的接口,其定义符合(来自 Reactive Stream initiative 的)广泛参与”,这就是 Flow 类的来源。
Reactive Streams 由 4 个 Java 接口构成:
- 处理器(Processor)
- 发布商(Publisher)
- 订阅用户(Subscriber)
- 订阅(Subscription)
Flow 类允许相互关联的接口和静态方法来建立流控制组件,其中发布者产生由一个或多个订阅者消费的项目,每个订阅者由订阅管理。
Reactive Streams 构建在 java.util.concurrent.Flow 容器对象下,开发者可以在这里找到 Flow.Publisher,一个用作 lambda 表达式或方法引用的赋值目标功能接口。该接口可以让开发者更容易生成 Flow.Subscription 元素,并且将它们链接在一起。
另一个元素 Flow.Subscriber,是异步工作机制,由请求触发。它可以从 Flow.Subscription 请求多个元素,开发者还可以根据需要自定义缓冲区大小。
这些接口适用于并发和分布式异步设置,它们之间的通信依赖于一种简单的流控制形式,可用于避免资源管理问题。
感兴趣的用户可以在 java.util.concurrent.Flow 下面查看代码示例。
目前已有一些第三方库实现了 Reactive Streams 接口,你无需等到 Java 9 发布便可尝试一下。
CompletableFuture 新特性 Java 8 引进了 CompletableFuture,继承自 Future<T>。Futures 是非常有用的,当我们不希望或者不需要一个直接计算结果的时候,我们会收到一个 Future 对象来保存计算完成时分配的实际结果。通过调用 complete ()方法并且无需异步等待即可显式完成。它还允许在一系列操作中构建管道数据流程。
这样,任何类型的可用值都可以在 Future 中使用默认返回值,即使计算没有完成。这也将成为 CompletableFuture 提案更新的一部分,包括延迟和超时、更好地支持子类化和一些实用方法。
更多 CompletableFuture 功能改进和提案,大家可以前往这里查看。
总结 Java 9 即将带来一些重大的更新与改进,其中 JEP 266 会是最有趣的一部分改进。它的改进方案主要来自社区的一些倡议,旨在帮助开发人员解决异步处理方面的一些重大问题。
你也许感兴趣的:
- 调查显示新发布的java9不太受欢迎
- Java 9正式发布,新特性解读
- 期待已久的Java 9 今日发布
- Java平台首席架构师Mark Reinhold辟谣人们对Java9的10大误解
- 你准备好使用Java9了吗?
- Java 9的前9大改进和功能,程序员不妨先了解
- Java 9 中的 9 个新特性
- Java 9 尝鲜之交互式编程环境
- 示例带你提前了解 Java 9 中的新特性
- 5个Java9新特性你知道了吗?
你对本文的反应是: