最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

springboot CompletableFuture并行計(jì)算及使用方法

 更新時(shí)間:2024年05月07日 09:35:15   作者:張占嶺  
CompletableFuture基于 Future 和 CompletionStage 接口,利用線程池、回調(diào)函數(shù)、異常處理、組合操作等機(jī)制,提供了強(qiáng)大而靈活的異步編程功能,這篇文章主要介紹了springboot CompletableFuture并行計(jì)算及使用方法,需要的朋友可以參考下

在Spring中,CompletableFuture通常用于異步編程,可以方便地處理異步任務(wù)的執(zhí)行和結(jié)果處理,CompletableFuture 是 Java 8 引入的一個(gè)類,用于支持異步編程和并發(fā)操作。它基于 Future 和 CompletionStage 接口,提供了豐富的方法來處理異步任務(wù)的執(zhí)行和結(jié)果處理。

下面是 CompletableFuture 實(shí)現(xiàn)的一些關(guān)鍵原理:

  • 線程池支持CompletableFuture 內(nèi)部使用線程池來執(zhí)行異步任務(wù),可以通過指定不同的線程池來控制任務(wù)的執(zhí)行方式。默認(rèn)情況下,CompletableFuture 使用 ForkJoinPool.commonPool() 作為默認(rèn)的線程池。

  • 回調(diào)函數(shù)CompletableFuture 支持鏈?zhǔn)秸{(diào)用,可以通過 thenApply()thenAccept()thenRun()thenCompose() 等方法添加回調(diào)函數(shù),在異步任務(wù)完成后處理任務(wù)的結(jié)果或執(zhí)行下一步操作。

  • 異常處理CompletableFuture 提供了 exceptionally()handle()whenComplete() 等方法來處理異步任務(wù)中可能拋出的異常,確保異常能夠被捕獲并處理。

  • 組合操作CompletableFuture 支持多個(gè) CompletableFuture 對(duì)象之間的組合操作,如 thenCombine()thenCompose()allOf()anyOf() 等方法,實(shí)現(xiàn)并行執(zhí)行、串行執(zhí)行、等待所有任務(wù)完成等功能。

  • CompletableFuture 工廠方法:除了 supplyAsync() 方法外,CompletableFuture 還提供了一系列工廠方法來創(chuàng)建 CompletableFuture 對(duì)象,如 runAsync()completedFuture()failedFuture() 等,方便快速創(chuàng)建并管理異步任務(wù)。

總的來說,CompletableFuture 的實(shí)現(xiàn)基于 Future 和 CompletionStage 接口,利用線程池、回調(diào)函數(shù)、異常處理、組合操作等機(jī)制,提供了強(qiáng)大而靈活的異步編程功能,使得開發(fā)人員能夠更加方便地處理異步任務(wù)的執(zhí)行和結(jié)果處理。

使用方法(一)鏈?zhǔn)?/h2>

如果我們的業(yè)務(wù)方法已經(jīng)寫完了,這時(shí)可以直接通過supplyAsync方法來調(diào)用這些已知的方法,而不需要重新開發(fā)

CompletableFuture<String> a1 = CompletableFuture.supplyAsync(() -> {
      try {
          Thread.sleep(1000);
      } catch (InterruptedException e) {
          throw new RuntimeException(e);
      }
      return "Hello World";
  });
  CompletableFuture<String> a2 = CompletableFuture.supplyAsync(() -> {
      try {
          Thread.sleep(2000);
      } catch (InterruptedException e) {
          throw new RuntimeException(e);
      }
      return "Hello World";
  });
  CompletableFuture<String> a3 = CompletableFuture.supplyAsync(() -> {
      try {
          Thread.sleep(3000);
      } catch (InterruptedException e) {
          throw new RuntimeException(e);
      }
      return "Hello World";
  });
  // 這塊最后是并行計(jì)算時(shí)間為3秒
  CompletableFuture.allOf(a1, a2, a3).join();
  String result = a1.get() + " | " + a2.get() + " | " + a3.get();

使用方法(二)獨(dú)立方法

如果方法比較獨(dú)立,并且之前沒有開發(fā)過,那么你可以通過異步方法來將這些邏輯與調(diào)用代碼解耦

@Service
@EnableAsync
public class ParallelTaskService {
    @Async
    public CompletableFuture<String> task1() {
        // 模擬一個(gè)耗時(shí)操作
        try {
            Thread.sleep(3000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        return CompletableFuture.completedFuture("Task 1 completed");
    }
    @Async
    public CompletableFuture<String> task2() {
        // 模擬另一個(gè)耗時(shí)操作
        try {
            Thread.sleep(2000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        return CompletableFuture.completedFuture("Task 2 completed");
    }
}
// 并行計(jì)算時(shí),響應(yīng)時(shí)間是2和3秒之中最大值,即3秒
@GetMapping("/hello-world2")
public CompletableFuture<String> helloWorld2() {
    CompletableFuture<String> task1Result = parallelTaskService.task1();
    CompletableFuture<String> task2Result = parallelTaskService.task2();
    // 等待所有任務(wù)都完成
    CompletableFuture<Void> allOf = CompletableFuture.allOf(task1Result, task2Result);
    // 處理所有任務(wù)完成后的邏輯
    return allOf.thenApply(voidResult -> {
        String result = task1Result.join() + " | " + task2Result.join();
        return result;
    });
}

到此這篇關(guān)于springboot CompletableFuture并行計(jì)算的文章就介紹到這了,更多相關(guān)springboot 并行計(jì)算內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • SpringBoot配置SLF4J日志全過程

    SpringBoot配置SLF4J日志全過程

    這篇文章主要介紹了SpringBoot配置SLF4J日志全過程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • Java實(shí)現(xiàn)屏幕截圖工具的代碼分享

    Java實(shí)現(xiàn)屏幕截圖工具的代碼分享

    這篇文章主要為大家介紹了如何利用Java語言編寫一個(gè)電腦屏幕截圖工具,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)有一定的幫助,需要的可以參考一下
    2022-05-05
  • Java實(shí)現(xiàn)文件的歸檔和解檔

    Java實(shí)現(xiàn)文件的歸檔和解檔

    這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)文件的歸檔和解檔,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-09-09
  • 基于Restful接口調(diào)用方法總結(jié)(超詳細(xì))

    基于Restful接口調(diào)用方法總結(jié)(超詳細(xì))

    下面小編就為大家?guī)硪黄赗estful接口調(diào)用方法總結(jié)(超詳細(xì))。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-08-08
  • 從JVM的內(nèi)存管理角度分析Java的GC垃圾回收機(jī)制

    從JVM的內(nèi)存管理角度分析Java的GC垃圾回收機(jī)制

    這篇文章主要介紹了從JVM的內(nèi)存管理角度分析Java的GC垃圾回收機(jī)制,帶有GC是Java語言的重要特性之一,需要的朋友可以參考下
    2015-11-11
  • 必須要學(xué)會(huì)的JMM與volatile

    必須要學(xué)會(huì)的JMM與volatile

    這篇文章主要介紹了必須要學(xué)會(huì)的JMM與volatile,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-09-09
  • IntelliJ IDEA右鍵文件夾沒有Java Class文件的原因及解決方法

    IntelliJ IDEA右鍵文件夾沒有Java Class文件的原因及解決方法

    這篇文章主要介紹了IntelliJ IDEA右鍵文件夾沒有Java Class文件的原因及解決方法,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-09-09
  • 用Java制作用戶登錄界面超詳細(xì)圖文教程

    用Java制作用戶登錄界面超詳細(xì)圖文教程

    很多人學(xué)習(xí)Java的第一個(gè)任務(wù)是使用Java設(shè)計(jì)客戶端登錄界面中,希望我的學(xué)習(xí)方法與總結(jié)能幫助到需要的朋友,這篇文章主要給大家介紹了關(guān)于用Java制作用戶登錄界面的相關(guān)資料,需要的朋友可以參考下
    2024-06-06
  • JAVA使用反射讀取注解方式

    JAVA使用反射讀取注解方式

    在Java中,反射機(jī)制不僅可以操作對(duì)象的屬性和方法,還可以讀取注解,本文介紹了反射讀取注解的步驟,包括定義注解、使用注解、通過反射獲取注解信息及處理注解信息,通過具體代碼例子和運(yùn)行結(jié)果,詳細(xì)解釋了注解的定義、使用和反射獲取注解的過程
    2024-09-09
  • SpringBoot Jpa 自定義查詢實(shí)現(xiàn)代碼詳解

    SpringBoot Jpa 自定義查詢實(shí)現(xiàn)代碼詳解

    這篇文章主要介紹了SpringBoot Jpa 自定義查詢實(shí)現(xiàn)代碼詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-02-02

最新評(píng)論

津市市| 金华市| 永登县| 黄大仙区| 张掖市| 怀化市| 习水县| 庆元县| 武功县| 泰安市| 桃园市| 响水县| 汶川县| 赫章县| 荔波县| 中卫市| 朝阳县| 铜陵市| 福清市| 枣强县| 额敏县| 德令哈市| 新巴尔虎左旗| 祥云县| 台湾省| 天长市| 双江| 汨罗市| 海宁市| 镇康县| 阜平县| 东源县| 滨海县| 衡东县| 浮梁县| 南丹县| 乾安县| 汉寿县| 扶风县| 盐城市| 雷山县|