一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - 詳解Java CompletableFuture使用方法以及與FutureTask的區別

詳解Java CompletableFuture使用方法以及與FutureTask的區別

2022-03-01 11:56一月三千五 Java教程

CompletableFuture實現了CompletionStage接口和Future接口,前者是對后者的一個擴展,增加了異步回調、流式處理、多個Future組合處理的能力,使Java在處理多任務的協同工作時更加順暢便利

總的來說簡潔了FutureTask與線程池的配合使用

沒啥太大區別吧我覺得, 使用方法不一樣, 多了一些方法 ???

 

futureTask 創建異步任務

      FutureTask<String> stringFutureTask = new FutureTask<>(() -> {
          return "aa";
      });
      executorService.execute(stringFutureTask);
      System.out.println(stringFutureTask.get());

      CompletableFuture<String> future1 = CompletableFuture.supplyAsync(() -> {
          return "aa";
      }, executorService); // 不用手動提交了
      System.out.println(future1.get());

還有很多異步回調, 組合處理

 

創建任務

1. .supplyAsync

創建一個帶返回值的任務

2. .runAsync

創建一個不帶返回值的任務

      ExecutorService executorService = Executors.newFixedThreadPool(1);

      // 帶返回值
      CompletableFuture future = CompletableFuture.supplyAsync(() -> {
          try {
              System.out.println("future " + new Date());
              Thread.sleep(2000);
          } catch (InterruptedException e) {
              e.printStackTrace();
          }
          return "aaa";
      }, executorService); // 推薦使用

以上兩個方法都有兩個構造方法, 默認不指定自定義線程池, 他會指定默認的提交任務的方法

  // 查看cpu的核數是否大于1核
  private static final boolean useCommonPool =
      (ForkJoinPool.getCommonPoolParallelism() > 1);

  // 如果大于1核 則調用execute方法, 每次創建一個線程
  private static final Executor asyncPool = useCommonPool ?
      ForkJoinPool.commonPool() : new ThreadPerTaskExecutor();

  static final class ThreadPerTaskExecutor implements Executor {
      public void execute(Runnable r) { new Thread(r).start(); }
  }

所以推薦自定義線程池的方式

 

異步回調

指的是 異步任務結束后調用的任務

1. .thenApply

帶返回值的異步調用函數, 有入參, 有出參

2. .thenAccept

不帶返回值的異步回調函數, 有入參

      CompletableFuture future = CompletableFuture.supplyAsync(() -> {
          try {
              System.out.println("future " + new Date());
              Thread.sleep(2000);
          } catch (InterruptedException e) {
              e.printStackTrace();
          }
          return "aaa";
      }, executorService);

      // future執行完之后執行的異步任務
      CompletableFuture<String> thenApply = future.thenApply((result) -> {
          System.out.println("future2 " +new Date());
          System.out.println(result);
          return "bbb" + result;
      });

3. .exceptionally

異步任務出現異常調用的回調方法

      CompletableFuture future = CompletableFuture.supplyAsync(() -> {
          try {
              System.out.println("future " + new Date());
              Thread.sleep(2000);
              int a = 1 / 0;
          } catch (InterruptedException e) {
              e.printStackTrace();
          }
          return "aaa";
      }, executorService);

      CompletableFuture<String> exceptionally = future.exceptionally((result) -> {
          System.out.println("future3 " + result);
          return "bbb" + result;
      });
      
      // 出現異常則返回異常, 沒異常則返回future的返回值
      System.out.println(exceptionally.get());

詳解Java CompletableFuture使用方法以及與FutureTask的區別

去掉異常

詳解Java CompletableFuture使用方法以及與FutureTask的區別

4. .whenComplete

當主任務出現異常時, 會終止任務,get的時候會拋出主任務的異常, 入參值為null, 否則正常運行

      CompletableFuture future = CompletableFuture.supplyAsync(() -> {
          try {
              System.out.println("future " + new Date());
              Thread.sleep(2000);
              int a = 1/0;
          } catch (InterruptedException e) {
              e.printStackTrace();
          }
          return "aaa";
      }, executorService);

      CompletableFuture<String> exceptionally = future.whenComplete((result, error) -> {
          System.out.println("future3 " + result);
          System.out.println("future3 " + error);
      });
      System.out.println(exceptionally.get());

詳解Java CompletableFuture使用方法以及與FutureTask的區別

去掉異常

詳解Java CompletableFuture使用方法以及與FutureTask的區別

 

組合處理

....

就是將多個任務組合起來執行, 時間原因, 這里我就不介紹了, 大家另行百度吧

到此這篇關于詳解Java CompletableFuture使用方法的文章就介紹到這了,更多相關Java CompletableFuture內容請搜索服務器之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持服務器之家!

原文鏈接:https://blog.csdn.net/weixin_44912855/article/details/119269417

延伸 · 閱讀

精彩推薦
  • Java教程SpringBoot整合spring-retry實現接口請求重試機制及注意事項

    SpringBoot整合spring-retry實現接口請求重試機制及注意事項

    今天通過本文給大家介紹我們應該如何使用SpringBoot來整合spring-retry組件實現重試機制及注意事項,本文通過實例代碼給大家介紹的非常詳細,需要的朋友參...

    Java潘老師10722021-11-18
  • Java教程十道java華為編程大賽題目

    十道java華為編程大賽題目

    這篇文章主要為大家分享了十道java華為編程大賽題目,代碼經過調試,經典的java編程題,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    SheepMu11622021-04-18
  • Java教程java 動態增加定時任務示例

    java 動態增加定時任務示例

    本篇文章主要介紹了java 動態增加定時任務示例,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧 ...

    張錫斌7422020-08-23
  • Java教程java設計模式系列 - 原型模式

    java設計模式系列 - 原型模式

    原型模式其實很簡單,就是利用Java提供的Clonable接口,實現對象的復制。之所以稱之為原型模式,是因為我們復制的時候要有一個原型或者模型。該模式經...

    花括號MC4482021-10-28
  • Java教程Java多線程之線程池七個參數詳解

    Java多線程之線程池七個參數詳解

    這篇文章主要介紹了Java多線程之線程池七個參數詳解,文中有很詳細的代碼示例,對正在學習java的小伙伴們有很好的幫助,需要的朋友可以參考下...

    一個抓手9552021-09-06
  • Java教程詳解使用Spring Boot的AOP處理自定義注解

    詳解使用Spring Boot的AOP處理自定義注解

    本篇文章主要介紹了詳解使用Spring Boot的AOP處理自定義注解,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧...

    crane-yuan11292021-03-18
  • Java教程Java使用ObjectMapper的簡單示例

    Java使用ObjectMapper的簡單示例

    這篇文章主要介紹了Java使用ObjectMapper的簡單示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面...

    學海無涯51913452020-09-18
  • Java教程解決maven update project 后項目jdk變成1.5的問題

    解決maven update project 后項目jdk變成1.5的問題

    下面小編就為大家帶來一篇解決maven update project 后項目jdk變成1.5的問題。小編覺得挺不錯的,現在就分享給大家,也給大家做個參考。一起 小編過來看看吧...

    jingxian5722020-07-07
主站蜘蛛池模板: 国产思妍小仙女一二区 | 成人国产午夜在线视频 | 九九大香尹人视频免费 | 国产专区一va亚洲v天堂 | 亚洲AV无码国产精品色在线看 | 精品精品国产自在现拍 | 99成人免费视频 | 亚洲高清在线视频 | 极品虎白女在线观看一线天 | 国产一卡2卡3卡4卡公司科普 | 久久伊人影院 | h片在线看| 国产一区二区免费福利片 | 精品一区二区三区视频日产 | 放荡警察巨r麻麻出轨小说 范冰冰特黄xx大片 饭冈加奈子在线播放观看 法国老妇性xx在线播放 | 亚洲精品国精品久久99热 | 日本在线视频播放 | 美女扒开屁股让男人进去 | 调教禽兽| 99re这里只有精品视频 | 91寡妇天天综合久久影院 | 98精品全国免费观看视频 | 性夜影院午夜看片 | 国产一区二区三区久久小说 | 99久久99热久久精品免费看 | 青青网在线视频 | 好爽视频| 久久黄色录像 | 女子张腿让男人桶免费 | 天天干天天爽天天操 | 亚洲欧美日韩国产一区图片 | 国偷盗摄自产福利一区在线 | 欧美激情 亚洲 | 国内精品91东航翘臀女神在线 | 9久re热视频这里只有精品 | 日韩欧美色图 | 91四虎国自产在线播放线 | 小仙夜晚慰自催眠mp3护士篇 | 成人啪精品视频免费网站 | 俄罗斯一级成人毛片 | 亚洲国产精品ⅴa在线观看 亚洲国产高清一区二区三区 |