国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

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

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
主站蜘蛛池模板: 欧美成人一区二区三区 | 中文字幕免费在线观看视频 | 欧美一区二区三区精品 | 国产免费黄色 | 成人在线免费观看视频 | 欧美成年黄网站色视频 | 欧美日韩三区 | 一级欧美日韩 | 日韩欧美国产一区二区 | 国产精品国产三级国产aⅴ原创 | 黄色在线免费观看视频网站 | 一区二区三区 在线 | av免费网站 | 91精品国产一区二区三区香蕉 | 国产高清亚洲 | 中文字幕高清视频 | 欧洲另类交 | 国偷自产一区二区免费视频 | 国产精品久久久久久久久免费桃花 | 五月婷婷视频 | 国产精品69毛片高清亚洲 | 精品久久久久久久久久久 | 久久精品久久久久久 | www.fefe66.com| 国产女精品| 曰本人一级毛片免费完整视频 | 不卡免费在线视频 | 日本黄色大片 | 亚洲精品久久久久中文字幕欢迎你 | 交视频在线观看国产 | 亚洲人人爱 | 精品国产乱码久久久久久丨区2区 | 日韩免费av一区二区 | 成人高清在线视频 | 粉嫩一区二区三区 | 国产毛片久久久久 | 国产精品一区二区不卡 | 亚洲视频日韩 | av久草| 日韩精品99 | 久久国产免费 |