天天看点

Java 9为何让开发者如此兴奋,来看看它的这一基本功能!

java 9即将在2017年7月正式发布,并提供一份关于新增和修订的功能以及一些特性的说明清单。对jdk增强提议(简称jep)进行搜索时,我们发现了jep 266中包含了:对completablefuture进行了不少更新,和更新了并发功能和要支持reactive streams机制相关的内容,这引起了我的注意。

java 9为何让开发者如此兴奋,来看看它的这一基本功能!

在本文中,我们就聊聊jep 266的新增和修订的功能吧,并且它很有可能成为java 9 的特性之一。

1.java 9将迎来哪些强化?

作为甲骨文公司起草的jdk增强提议(简称jep)之一,它包含了很多有趣的更新,目的是用于解决并行机制相关的问题。

根据这份提议,java 9将迎来以下变更与更新:

各接口支持reactive streams发布的订阅框架。

completablefuture api将得到全面改进,包括支持支持延迟、超时、子类化和其它方法。

更多小型调整与javadoc规范修改。

这里我们主要分析两项核心内容。第一项内容是java 9将支持reactive streams,这个提议来自java技术社区提出的改进计划,目的是改进开发者的并行工作流程。其次是completablefuture api的修复性提升,可以让开发者回到future。

但这些都有怎样的实际意义呢?

2.flow类介绍

第一项更新的“各接口支持reactive streams发布的订阅框架”,就是将新的flow类嵌套进去,和可供开发者用于创建自定义组件的submissionpublisher。

让我们逐一进行讨论。reactive streams能够解决背压(back-pressure)难题。当输入任务速率高于系统的处理能力时,就会发生数据累积并会对未处理数据提供一个缓冲区。

就此,我们与reactive streams开发团队akka高级开发者konrad malawski进行了交流,他解释了reactive streams 的重要性以及如何使用。

甲骨文方面指出,这项新增强将包含“一套小型接口,用以对接reactive streams项目中各类得到广泛使用的定义接口。”

而flow类的作用也正在于此。reactive steams由4个java接口构建而成:

处理器(processor)

发布商(publisher)

订阅用户(subscriber)

订阅(subscription)

flow类允许各互关联接口与静态方法建立受控流程组件,发布者产生由一个或多个订阅者消费的项目,每个订阅者由订阅管理。

reactive streams位于容器对象java.util.concurrent.flow之下。大开发者可以在这里找到 flow.publisher,一个用作 lambda 表达式或方法引用的赋值目标功能接口。此接口将显著简化面向flow.subscription的元素生成方式,并由flow.subscription将二者关联起来。

另一项元素为flow.subscriber,是用异步工作机制运作,并能通过请求实现触发。它能能够从flow.subscription处获取多个元素,大家可根据需求自定义缓冲区大小。

这些接口同时适用于并发与分布式异步设置,且接口之间的通信,是通过一种简单的流控制形式实现,并可用于避免发生资源管理的问题。

另外,大家也无需等待java 9正式发布即可体验reactive streams接口,目前也已经在多种第三方库采用此类接口。

3.completablefuture新特性

java 8首次引入completablefuture是,就已经对future进行了扩展。future适用于,当我们不希望或者不需要一个直接计算结果的时候,我们会收到一个 future 对象来保存计算完成时分配的实际结果。

completablefuture对future对象做出两方面扩展。其能够在无需任何异步等待的情况下,通过调用complete()方法即可显式完成。另外,它还允许利用一系列操作中,构建起数据处理管道。

如此一来,任意类型的值皆能在 future 中使用默认返回值,即使当前计算尚未完成,它也可使用默认即时结果。这些更新将能够有效解决开发者在使用java 8时面临的部分难题。

总结

java 9确实为我们带来一系列重大更新与改进,其中 jep 266 会是最有趣的一部分改进。另外,我们认为jep 266,也是甲骨文发布的最值得关注的更新之一,因为其源自技术社区本身的倡议,旨在帮助开发者解决异步流程处理中的一些常见难题。我们对此深表赞赏,同时也期待着java 9的正式发布。

本文转自d1net(转载)