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

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

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
主站蜘蛛池模板: 九九精品国产兔费观看久久 | 久久伊人久久 | 95视频在线观看在线分类h片 | 亚洲 综合 欧美在线视频 | 日本暖暖在线 | 国产欧美在线播放 | 欧美成人三级伦在线观看 | 色哟哟哟| 香蕉国产人午夜视频在线 | 国产福利资源网在线观看 | 99看视频| 国产欧美曰韩一区二区三区 | 日韩国产欧美成人一区二区影院 | 无码人妻精品一区二区蜜桃在线看 | 无套内射在线观看THEPORN | 97视频免费人人观看人人 | 久久爽狠狠添AV激情五月 | 15同性同志18 | 9久热久爱免费精品视频在线观看 | 456亚洲人成高清在线 | 三级黄色片在线免费观看 | 91制片厂制作传媒网站 | 日韩视频一区 | 桥本有菜作品在线 | boobsmilking流奶水野战 | 色视频久久 | 人体欣赏孕妇季玥图片 | 午夜影院费试看黄 | 国产高清在线精品一区二区 | 精品小视频在线观看 | 2020年国产精品午夜福利在线观看 | 色ccc36| 欧美日韩色图 | 暖暖高清日本在线 | 成人影院在线观看 | 国产精品秒播无毒不卡 | 色人阁导航 | 亚洲视频在线一区二区三区 | 99久久精品6在线播放 | 亚洲一区二区福利视频 | 小草高清视频免费直播 |