天天看點

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(轉載)