<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 22, comments - 32, trackbacks - 0, articles - 73
      BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

    JDK 8 CompletableFuture 詳細(xì)使用介紹

    Posted on 2020-07-23 19:29 為自己代言 閱讀(859) 評論(0)  編輯  收藏 所屬分類: java/J2EE

    JDK 8 中 CompletableFuture 是對 Future 的增強(qiáng) 大大簡化了異步編程步驟,在Spring 框架中配合@EnableAsync @Async 更加事辦功倍。

    1:在JDK 8 之前實(shí)現(xiàn)多線必需實(shí)現(xiàn)兩個(gè)接口 Runnable 不帶返回值,另一個(gè)Callable帶返回值的接口,配合ThreadPoolTaskExecutor.submit(Callable callable) 返回一個(gè)Future對象。 使用Future獲得異步執(zhí)行結(jié)果時(shí),要么調(diào)用阻塞方法get(),要么輪詢看isDone()是否為true,這兩種方法都不是很好,因?yàn)橹骶€程也會被迫等待,而CompletableFuture出現(xiàn)改變了這個(gè)問題,而且提供更多并且強(qiáng)大的其它功能。
    2:CompletableFuture簡介 CompletableFuture<T> implements Future<T>, CompletionStage<T> 其實(shí)CompletableFuture 除了實(shí)現(xiàn)原來的Future 接口外,其它大部分方法都是在CompletionStage中 CompletableFuture 類圖
    大致介紹下completableFuture的命名規(guī)則

    1:按功能分類的話:

    • xxx():表示該方法將繼續(xù)在已有的線程中執(zhí)行;

    • xxxAsync():表示將異步在線程池中執(zhí)行。

    • 異步執(zhí)行方法默認(rèn)一個(gè)參數(shù)的話任務(wù)是在 ForkJoinPool.commonPool() 線程池中執(zhí)行的,帶executor 參數(shù)的使用 executor線程池異步執(zhí)行。

    2:按邏輯和組織方式來分話(completableFuture 中大約有50個(gè)來方法)

    • 一種是 then 的邏輯,即前一個(gè)計(jì)算完成的時(shí)候調(diào)度后一個(gè)計(jì)算

    • 一種是 both 的邏輯,即等待兩個(gè)計(jì)算都完成之后執(zhí)行下一個(gè)計(jì)算,只要能組合一個(gè)和另一個(gè),我們就可以無限復(fù)用這個(gè) +1 的邏輯組合任意多的計(jì)算

    • 另一種是 either 的邏輯,即等待兩個(gè)計(jì)算的其中一個(gè)完成之后執(zhí)行下一個(gè)計(jì)算。注意這樣的計(jì)算可以說是非確定性的。因?yàn)楸唤M合的兩個(gè)計(jì)算中先觸發(fā)下一個(gè)計(jì)算執(zhí)行的那個(gè)會被作為前一個(gè)計(jì)算,而這兩個(gè)前置的計(jì)算到底哪一個(gè)先完成是不可預(yù)知的

    3:從依賴關(guān)系和出入?yún)?shù)類型區(qū)別,基本分為三類:

    • apply 字樣的方式意味著組合方式是 Function,即接受前一個(gè)計(jì)算的結(jié)果,應(yīng)用函數(shù)之后返回一個(gè)新的結(jié)果

    • accept 字樣的方式意味著組合方式是 Consumer,即接受前一個(gè)計(jì)算的結(jié)果,執(zhí)行消費(fèi)后不返回有意義的值

    • run 字樣的方式意味著組合方式是 Runnable,即忽略前一個(gè)計(jì)算的結(jié)果,僅等待它完成后執(zhí)行動作
    其中出入?yún)?shù)主要有JDK8 Function,Consumer或Runnable三中函數(shù)型接口,每一種都決定了是怎么樣一種依賴關(guān)系,我有一篇文章詳細(xì)介紹了JDK8函數(shù)型接口用法,能有助理解completableFuture方法使用。
    http://m.tkk7.com/zzzlyr/articles/435611.html

    4:completableFuture 配合框架使用

      因?yàn)樽詮腏DK8以后增強(qiáng)了多線程的使用便捷程度:
    1:JDk8 的函數(shù)式接口和lambda表過式
    2:completableFuture 對 Future 類的增強(qiáng)。
    這只是JDK 基礎(chǔ)包中的功能,現(xiàn)在大部分開發(fā)都在使用框架 java 現(xiàn)在基本上都在使用spring框架,因?yàn)镴DK基礎(chǔ)包中的功能還是不如框架使用方便,下邊文章詳細(xì)介紹 springboot中對JDK基礎(chǔ)包中多線程功能配置和使用。
    http://m.tkk7.com/zzzlyr/articles/435305.html



    主站蜘蛛池模板: 亚洲精品乱码久久久久66| 国产免费私拍一区二区三区| 亚洲尤码不卡AV麻豆| 午夜亚洲国产精品福利| 亚洲?V无码乱码国产精品| 久久人午夜亚洲精品无码区| 日韩午夜免费视频| 日韩国产精品亚洲а∨天堂免| 日本高清色本免费现在观看| 国产亚洲人成在线影院| 深夜国产福利99亚洲视频| 又硬又粗又长又爽免费看 | 1000部拍拍拍18勿入免费凤凰福利| 亚洲电影一区二区三区| 99re6在线视频精品免费下载| 亚洲国产成人精品电影| 大陆一级毛片免费视频观看| 免费精品国产自产拍在线观看 | 亚洲男人第一av网站| 精品国产污污免费网站aⅴ | 亚洲高清免费视频| 亚洲AV福利天堂一区二区三| 四虎永久在线精品免费观看视频| 亚洲人成人网站18禁| 亚洲日韩人妻第一页| 香蕉成人免费看片视频app下载| 亚洲天堂2017无码中文| 国产乱子伦片免费观看中字| 三根一起会坏掉的好痛免费三级全黄的视频在线观看 | 亚洲中文字幕无码爆乳app| 亚洲国产午夜中文字幕精品黄网站| 免费观看在线禁片| 2020年亚洲天天爽天天噜| 伊人久久亚洲综合影院| 免费A级毛片av无码| 亚洲国产精品成人午夜在线观看| 国产成人亚洲综合无码| 久久福利资源网站免费看| 污网站在线免费观看| 亚洲精品自在线拍| 亚洲精品国产福利一二区|