激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

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

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

詳解Java CompletableFuture使用方法以及與FutureTask的區(qū)別

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

CompletableFuture實(shí)現(xiàn)了CompletionStage接口和Future接口,前者是對后者的一個(gè)擴(kuò)展,增加了異步回調(diào)、流式處理、多個(gè)Future組合處理的能力,使Java在處理多任務(wù)的協(xié)同工作時(shí)更加順暢便利

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

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

 

futureTask 創(chuàng)建異步任務(wù)

      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());

還有很多異步回調(diào), 組合處理

 

創(chuàng)建任務(wù)

1. .supplyAsync

創(chuàng)建一個(gè)帶返回值的任務(wù)

2. .runAsync

創(chuàng)建一個(gè)不帶返回值的任務(wù)

      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); // 推薦使用

以上兩個(gè)方法都有兩個(gè)構(gòu)造方法, 默認(rèn)不指定自定義線程池, 他會指定默認(rèn)的提交任務(wù)的方法

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

  // 如果大于1核 則調(diào)用execute方法, 每次創(chuàng)建一個(gè)線程
  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(); }
  }

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

 

異步回調(diào)

指的是 異步任務(wù)結(jié)束后調(diào)用的任務(wù)

1. .thenApply

帶返回值的異步調(diào)用函數(shù), 有入?yún)? 有出參

2. .thenAccept

不帶返回值的異步回調(diào)函數(shù), 有入?yún)?/p>

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

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

3. .exceptionally

異步任務(wù)出現(xiàn)異常調(diào)用的回調(diào)方法

      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;
      });
      
      // 出現(xiàn)異常則返回異常, 沒異常則返回future的返回值
      System.out.println(exceptionally.get());

詳解Java CompletableFuture使用方法以及與FutureTask的區(qū)別

去掉異常

詳解Java CompletableFuture使用方法以及與FutureTask的區(qū)別

4. .whenComplete

當(dāng)主任務(wù)出現(xiàn)異常時(shí), 會終止任務(wù),get的時(shí)候會拋出主任務(wù)的異常, 入?yún)⒅禐閚ull, 否則正常運(yùn)行

      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的區(qū)別

去掉異常

詳解Java CompletableFuture使用方法以及與FutureTask的區(qū)別

 

組合處理

....

就是將多個(gè)任務(wù)組合起來執(zhí)行, 時(shí)間原因, 這里我就不介紹了, 大家另行百度吧

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

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

延伸 · 閱讀

精彩推薦
  • Java教程SpringBoot整合spring-retry實(shí)現(xiàn)接口請求重試機(jī)制及注意事項(xiàng)

    SpringBoot整合spring-retry實(shí)現(xiàn)接口請求重試機(jī)制及注意事項(xiàng)

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

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

    十道java華為編程大賽題目

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

    SheepMu11622021-04-18
  • Java教程java 動態(tài)增加定時(shí)任務(wù)示例

    java 動態(tài)增加定時(shí)任務(wù)示例

    本篇文章主要介紹了java 動態(tài)增加定時(shí)任務(wù)示例,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧 ...

    張錫斌7422020-08-23
  • Java教程java設(shè)計(jì)模式系列 - 原型模式

    java設(shè)計(jì)模式系列 - 原型模式

    原型模式其實(shí)很簡單,就是利用Java提供的Clonable接口,實(shí)現(xiàn)對象的復(fù)制。之所以稱之為原型模式,是因?yàn)槲覀儚?fù)制的時(shí)候要有一個(gè)原型或者模型。該模式經(jīng)...

    花括號MC4482021-10-28
  • Java教程Java多線程之線程池七個(gè)參數(shù)詳解

    Java多線程之線程池七個(gè)參數(shù)詳解

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

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

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

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

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

    Java使用ObjectMapper的簡單示例

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

    學(xué)海無涯51913452020-09-18
  • Java教程解決maven update project 后項(xiàng)目jdk變成1.5的問題

    解決maven update project 后項(xiàng)目jdk變成1.5的問題

    下面小編就為大家?guī)硪黄鉀Qmaven update project 后項(xiàng)目jdk變成1.5的問題。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起 小編過來看看吧...

    jingxian5722020-07-07
主站蜘蛛池模板: 国产在线观看福利 | 高清av在线| 操操插插 | 美女黄视频在线观看 | 电影91 | 亚洲成人高清在线观看 | 免费一级毛片在线播放不收费 | 欧美性受ⅹ╳╳╳黑人a性爽 | 免费一级毛片在线播放不收费 | 一级电影在线观看 | 日本免费aaa观看 | 中文字幕在线视频日本 | av在线观| 国产精品久久久久久久久久久久午夜 | 九九热视频在线免费观看 | 国产成人综合在线 | 欧美精品激情在线 | 成人毛片一区二区三区 | 久久综合伊人 | 亚洲综合视频网 | 国产又白又嫩又紧又爽18p | 午夜a狂野欧美一区二区 | 88xx成人永久免费观看 | 中文字幕一区久久 | 亚洲人成中文字幕在线观看 | 久久综合爱 | 欧美一级免费在线观看 | 久久国产精品99久久人人澡 | 蜜桃传媒视频麻豆第一区免费观看 | 澳门一级淫片免费视频 | 精品久久中文网址 | 中文字幕专区高清在线观看 | 天天夜天天操 | 久久羞羞 | 中文字幕欧美一区二区三区 | 国内精品伊人久久久久网站 | 中国杭州少妇xxxx做受 | 男女羞羞视频在线免费观看 | 午夜视频在线观看免费视频 | 色婷婷一区二区三区 | 欧美性生活区 |