Java 9的這一基本功能,你可能從未聽過

hitt6668 7年前發布 | 18K 次閱讀 Java9 Java開發

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請求多個元素,開發者還可以根據需要自定義緩沖區大小。

這些接口適用于并發和分布式異步設置,它們之間的通信依賴于一種簡單的流控制形式,可用于避免資源管理問題。

CompletableFuture新特性

Java 8引進了CompletableFuture,繼承自Future<T>。Futures是非常有用的,當我們不希望或者不需要一個直接計算結果的時候,我們會收到一個Future對象來保存計算完成時分配的實際結果。通過調用complete()方法并且無需異步等待即可顯式完成。它還允許在一系列操作中構建管道數據流程。

這樣,任何類型的可用值都可以在Future中使用默認返回值,即使計算沒有完成。這也將成為CompletableFuture提案更新的一部分,包括延遲和超時、更好地支持子類化和一些實用方法。

總結

Java 9即將帶來一些重大的更新與改進,其中JEP 266會是最有趣的一部分改進。它的改進方案主要來自社區的一些倡議,旨在幫助開發人員解決異步處理方面的一些重大問題。

 

 

來自:http://www.iteye.com/news/32031

 

 本文由用戶 hitt6668 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!