日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

返回CompletableFuture:Java 8功能亮点

發布時間:2023/12/3 java 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 返回CompletableFuture:Java 8功能亮点 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

CompletableFuture與未來:與Java 8新功能保持異步

Java 8于2014年3月發布,并附帶了許多新功能。 鮮為人知的,極為有用卻被人誤解的功能之一是對Future接口的全新改進,即擴展:CompletableFuture <T>。

在下面的文章中,我們將提供CompletableFuture的整體視圖,以及它與簡單的Future有何不同以及何時有用。

異步Java代碼

Java 7向我們介紹了Future,它表示異步計算的結果。 使用Future對象的主要優點是,您可以在等待外部資源的同時做其他事情。 一種等待資源的非阻塞方式。

使用Future意味著您可以編寫一個方法,而不是立即返回結果,而是將返回Future對象。 當您需要實際結果時,只需使用Future.get()即可在計算完成后返回該值。

您還可以得到方法檢查計算是否是做的,一個辦法取消/檢查它是否被取消。

例如,假設您要調用某個外部資源,例如…… Marvel的開發人員API ,拔出所有名稱中帶有字母“ C”的超級英雄:

Future < String > marvel = executor.submit(new Callable < String > () {public String call() {return getMarvelHeroWithCharacter(“C”); // totally not making this up} });// other very important stuff of course, non-blocking ftwSystem.out.println(marvel.get()); // this bit is blocking if the result isn’t ready yet

是的,如果我們確實想使用完全異步的非阻塞選項,那我們就不走運了。 我們無法保證未來確實存在,我們可能必須等待。 這是CompletableFuture出現的地方,它有助于解決棘手的問題。

那么,CompletableFuture有什么新功能?

CompletableFuture <T>擴展了Future <T>并使之……可完成。 考慮到Future對象在Java 8之前是受限制的,只有5種可用方法,所以這很重要。

此新的和改進的CompletableFuture具有2個主要優點:

  • 可以通過調用complete()方法顯式完成此操作,而無需任何同步等待。 它允許將來使用默認/中間結果,使用默認返回值提供任何類型的值,即使計算未完成。
  • 使用數十種新方法,它還允許您通過一系列操作來構建管道數據流程。 您可以找到許多CompletableFuture模式,例如從任務創建CompletableFuture或構建CompletableFuture鏈。 可通過Oracle的CompletableFuture文檔獲得完整列表。
  • 回到我們的簡單示例,假設Marvel的API沒有返回及時的結果,并且getMarvelHeroWithCharacter()仍在處理中,這是很耗時的,而與此同時我們已經完成了其他所有想做的事情。 假設我們不想等待( 我們的生命結束了 ),CompletableFuture可以幫助我們返回中間結果。 像……神秘,因為在最壞的情況下,她可以變身為其他超級英雄。

    CompletableFuture < String > marvel = executor.submit(new Callable < String > () {public String call() {return getMarvelHeroWithCharacter(“C”);} });// other stuff goes heremarvel.complete(“Mystique”); // sets a “default” value if not yet completedSystem.out.println(marvel.get()); // non-blocking

    您也可以預先創建一個完整的CompletableFuture,該函數將返回一個已知值。 如果您想將已知值與需要計算的值結合起來,這在測試環境中可能會派上用場:

    CompletableFuture < String > cf =CompletableFuture.completedFuture("I'm done!"); cf.isDone(); // return true cf.join(); // return "I'm done"

    還有數十種其他更有用的方法,它們包括轉換并作用于一個CompletableFuture(thenApply),在完成時運行代碼(thenAccept / thenRun),將兩個CompletableFuture組合在一起等等。 要獲得完整的指南,我們建議您閱讀Java 8:CompletableFuture的權威指南 。

    滿足選擇

    如果您使用的是Guava或Scala(及其Futures ),則此新功能可能聽起來很熟悉。 它與Guava的ListenableFuture相似,后者為Future對象定義了一個一致的API,用于注冊完成回調。

    與新的CompletableFuture相似,添加回調的功能允許以異步有效的方式響應傳入的事件。 您可以注冊要在計算完成后執行的回調,并支持基本Future接口不支持的許多操作。

    當艱難的時刻

    使用CompletableFuture使我們能夠與我們的代碼一起運行,而不必等待結果,但是它仍然不能保證您的代碼在生產中運行時不會中斷。 發生錯誤時,您將需要盡快識別和分析它們,以部署修補程序。

    對于此類情況, Takipi將使您能夠在問題出現時有效地解決代碼中的問題,而不必“等”到其他人遇到它們。

    最后的想法

    CompletableFuture恰好適合作為異步編程趨勢的一部分,該趨勢在過去幾年中變得很流行。 難怪每個人都在談論它,因為我們可以使用它同時運行許多任務,從而實現最佳工作流程。

    如果您已經是異步編程的狂熱愛好者,則可能需要查看我們有關7種您必須知道的反應性編程工具的文章 。

    翻譯自: https://www.javacodegeeks.com/2016/06/back-completablefuture-java-8-feature-highlight.html

    總結

    以上是生活随笔為你收集整理的返回CompletableFuture:Java 8功能亮点的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。