您好,登錄后才能下訂單哦!
本篇內(nèi)容主要講解“java中分階段任務(wù)執(zhí)行舉例分析”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學(xué)習(xí)“java中分階段任務(wù)執(zhí)行舉例分析”吧!
CompletableFuture類實現(xiàn)了CompletionStage與Future接口。CompletionStage翻譯過來就是完成階段,表示任務(wù)的每個階段,然后它聲明了一些接下來對任務(wù)處理方式,而CompletableFuture是它的實現(xiàn)者。
可以把CompletableFuture看成流水線上的單元,一個單元完成可以觸發(fā)下一個單元的執(zhí)行,完成后接著觸發(fā)下一個,直到所有單元完成,最終會產(chǎn)生一個最終結(jié)果。
CompletableFuture也實現(xiàn)了Future接口, 代表一個異步執(zhí)行的任務(wù),可以獲取異步完成后結(jié)果。所以CompletableFuture也可以當(dāng)做一個Future,n那么就能夠顯式地完成這個Future。
所以CompletableFuture表示一個階段,也可以被當(dāng)做一個任務(wù),相當(dāng)于把流水線分成了各個任務(wù),所以是階段與任務(wù)的綜合體。
CompletableFuture提供的方法很多,并且大多數(shù)CompletableFuture方法都會返回一個CompletableFuture,然后再繼續(xù)調(diào)用新的方法,所以后面把調(diào)用方法的階段對象叫做前一個階段,而這個方法則表示這個階段。
這里先把方法進(jìn)行分類,分類總結(jié)圖如下圖:
首先是以Async結(jié)尾的方法,它表示要執(zhí)行的階段將會異步的執(zhí)行,這類方法都可以傳遞一個executor(線程池)進(jìn)去,指定線程池去異步執(zhí)行,如果沒有指定則會使用默認(rèn)的通過ForkJoinPool實現(xiàn)。
后續(xù)其他方法基本上都可以和Async(除了anyof與allof),如果方法有Async則表示是異步執(zhí)行,否則是同步執(zhí)行。
然后我們來看以thenApply開頭的方法,thenApply可以分成兩個部分:
then表示這個階段的動作發(fā)生當(dāng)前的階段正常完成之后。
Apply表示這個階段會使用前一個階段(調(diào)用這個方法的階段對象)返回的結(jié)果作為參數(shù)。
thenApply如果后面接了Async則表示下一個階段會采用異步執(zhí)行,如果沒有則會使用同一個線程繼續(xù)執(zhí)行,后面的方法也差不多。
然后就是一個thenAccept開頭的方法了,它實際上和thenApply差不多,只不過它接受的參數(shù)是Consumer,也就是是一個存消費者,并不返回值。如果下一階段接收了當(dāng)前階段的結(jié)果,但是在計算的時候不需要返回值(它的返回類型是void)。
applyToEither可以處理兩個階段,當(dāng)前階段與作為參數(shù)傳遞進(jìn)去的other階段,只要其中一個完成那么另外一個參數(shù)fn就會執(zhí)行。也就是它的功能是只要任何一個階段完成就可以進(jìn)入下一個階段了。
acceptEither與applyToEither的區(qū)別就和thenAccept和thenApply區(qū)別一樣。
runAfterBoth方法就像上面那類方法相反,必須要兩個階段的任務(wù)完成后才能進(jìn)入下一個階段;
thenAcceptBoth方法接受的參數(shù)是CompletableFuture與BiConsumer,BiConsumer可以接受他們兩個的結(jié)果然后進(jìn)行計算;
同樣thenCombine方法也能獲取到前面兩個階段的結(jié)果,這兩個階段相互獨立,然后把兩個結(jié)果進(jìn)行整合;
thenCompose表面上看起來也是一個階段的結(jié)果放到另外的階段上,但是它有不一定的不同,它是新建一個階段,這個階段會有多個后續(xù)階段,而最開始的結(jié)果可以作為新的階段的任意一個階段使用。就好像一個工作的單元的產(chǎn)品可以作為另外一個流水線的任意單元使用。
anyOf方法接受一個CompletableFuture集合,只要集合中任意一個完成中使用whenComplete(BiConsumer<? super Object, ? super Throwable> action)就可以用來處理完成的結(jié)果;
allOf方法與anyOf方法差不多,只不過它是等所有的CompletableFuture完成后才處理whenComplete。
方法都介紹完了,在做一個案例具體化,案例如下圖:
這個案例比較簡單,并且把每一步都返回用變量來接受了。
到此,相信大家對“java中分階段任務(wù)執(zhí)行舉例分析”有了更深的了解,不妨來實際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。