新聞中心
2017年7月即將發(fā)布的Java 9將會(huì)新增和修訂不少功能和特性。在搜索JDK增強(qiáng)提議(JEP)時(shí)發(fā)現(xiàn),JEP 266對(duì)CompletableFuture進(jìn)行了一些有趣的改進(jìn),更新并發(fā)功能和支持Reactive Streams。

創(chuàng)新互聯(lián)長(zhǎng)期為數(shù)千家客戶提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊(duì)從業(yè)經(jīng)驗(yàn)10年,關(guān)注不同地域、不同群體,并針對(duì)不同對(duì)象提供差異化的產(chǎn)品和服務(wù);打造開放共贏平臺(tái),與合作伙伴共同營(yíng)造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為日土企業(yè)提供專業(yè)的做網(wǎng)站、成都網(wǎng)站設(shè)計(jì),日土網(wǎng)站改版等技術(shù)服務(wù)。擁有10年豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制開發(fā)。
本文的焦點(diǎn)就是JEP 266的改進(jìn)和一些有趣的特性,它極有可能成為Java 9中最常用的特性之一。
JEP 266改進(jìn)計(jì)劃
JEP 266是Oracle草擬JDK增強(qiáng)協(xié)議里面的一員,其中對(duì)并發(fā)進(jìn)行了大量的更新。根據(jù)提案,將要進(jìn)行更新的特性有:
- 支持Reactive Streams發(fā)布-訂閱框架接口
- 對(duì)CompletableFuture API進(jìn)行更新,例如支持延遲、超時(shí)、子類化和其它方法
- 其它一般改進(jìn),例如小調(diào)整和javadoc規(guī)范重寫
本文重點(diǎn)關(guān)注前兩個(gè)改進(jìn)。首先,Java 9將支持Reactive Streams,這是一個(gè)來(lái)自Java社區(qū)的改進(jìn)計(jì)劃,旨在改進(jìn)開發(fā)人員的并發(fā)工作流程。其次是CompletableFuture API提供的幾個(gè)fixer-uppers,可以讓開發(fā)人員回到Future
Flow類
Reactive Streams發(fā)布-訂閱框架里面將嵌套一個(gè)Flow類,以及開發(fā)人員可以用來(lái)創(chuàng)建自定義組件使用的SubmissionPublisher。
先從最上面的說(shuō)起,Reactive Streams主要解決背壓(back-pressure)問題。當(dāng)傳入的任務(wù)速率大于系統(tǒng)處理能力時(shí),數(shù)據(jù)處理將會(huì)對(duì)未處理數(shù)據(jù)產(chǎn)生一個(gè)緩沖區(qū)。
與此同時(shí),我們還與Akka團(tuán)隊(duì)的高級(jí)開發(fā)人員Konrad Malawski進(jìn)行了溝通,他是Reactive Streams計(jì)劃的***,解釋了Reactive Streams的重要性以及如何使用。
Oracle指出,新的增強(qiáng)將包括“一個(gè)很小的接口,其定義符合(來(lái)自Reactive Stream initiative的)廣泛參與”,這就是Flow類的來(lái)源。
Reactive Streams由4個(gè)Java接口構(gòu)成:
- 處理器(Processor)
- 發(fā)布商(Publisher)
- 訂閱用戶(Subscriber)
- 訂閱(Subscription)
Flow類允許相互關(guān)聯(lián)的接口和靜態(tài)方法來(lái)建立流控制組件,其中發(fā)布者產(chǎn)生由一個(gè)或多個(gè)訂閱者消費(fèi)的項(xiàng)目,每個(gè)訂閱者由訂閱管理。
Reactive Streams構(gòu)建在java.util.concurrent.Flow容器對(duì)象下,開發(fā)者可以在這里找到Flow.Publisher,一個(gè)用作lambda表達(dá)式或方法引用的賦值目標(biāo)功能接口。該接口可以讓開發(fā)者更容易生成Flow.Subscription元素,并且將它們鏈接在一起。
另一個(gè)元素Flow.Subscriber,是異步工作機(jī)制,由請(qǐng)求觸發(fā)。它可以從Flow.Subscription請(qǐng)求多個(gè)元素,開發(fā)者還可以根據(jù)需要自定義緩沖區(qū)大小。
這些接口適用于并發(fā)和分布式異步設(shè)置,它們之間的通信依賴于一種簡(jiǎn)單的流控制形式,可用于避免資源管理問題。
感興趣的用戶可以在java.util.concurrent.Flow下面查看代碼示例。
目前已有一些第三方庫(kù)實(shí)現(xiàn)了Reactive Streams接口,你無(wú)需等到Java 9發(fā)布便可嘗試一下。
CompletableFuture新特性
Java 8引進(jìn)了CompletableFuture,繼承自Future
這樣,任何類型的可用值都可以在Future中使用默認(rèn)返回值,即使計(jì)算沒有完成。這也將成為CompletableFuture提案更新的一部分,包括延遲和超時(shí)、更好地支持子類化和一些實(shí)用方法。
更多CompletableFuture功能改進(jìn)和提案,大家可以前往這里查看。
總結(jié)
Java 9即將帶來(lái)一些重大的更新與改進(jìn),其中JEP 266會(huì)是最有趣的一部分改進(jìn)。它的改進(jìn)方案主要來(lái)自社區(qū)的一些倡議,旨在幫助開發(fā)人員解決異步處理方面的一些重大問題。
網(wǎng)站欄目:Java9的這一基本功能,你可能從未聽過
鏈接分享:http://www.dlmjj.cn/article/ccdiggp.html


咨詢
建站咨詢
