亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > Java > 正文

Java實現Promise.all()的示例代碼

2024-07-14 08:41:59
字體:
來源:轉載
供稿:網友

JavaScript的Promise.all()

Promise是JavaScript異步編程的一種解決方案,在ES6中引入。

通過Promise.all()可以實現對一組異步請求的統一處理,等待所有異步執行完成之后調用回調函數。

其實,這種并發執行同步等待的需求在Java并發編程中也很常見,那么,是否可以通過Java也來實現這樣一個Promise類呢?

使用Java實現Promise.all()

使用工具

CountDownLatch:Java并發工具包中有CountDownLatch類允許一個或多個線程等待其他線程的一系列操作完成。

ThreadPoolExecutor:通過線程池實現多線程的并發執行

實現

public class Promise {  private static ExecutorService executorService = Executors.newScheduledThreadPool(16);  private Promise() {    throw new AssertionError();  }  /**   * 實現并發同時地對某個action并發執行并返回執行結果   * 實現思路:   * 并發創建所有執行的線程,并通過鎖(start)阻塞等待著   * 在創建所有執行的線程后(ready)開始計時,并解鎖然所有的線程啟動   * 通過另外一個鎖(done)記錄執行完的線程   * 主線程只需關心3點   * - 所有線程是否準備好   * - 準備好的話開始計時并解鎖開始執行   * - 等待執行完畢   *   * @param callableList 要并發執行的列表   * @return list 執行結果,list.item為null的話表示執行異常   * @throws InterruptedException 異常   */  public static <T> List<T> all(final List<Callable<T>> callableList) throws InterruptedException {    final List<T> result = new ArrayList<>();    int length = callableList.size();    final CountDownLatch ready = new CountDownLatch(length);    final CountDownLatch start = new CountDownLatch(1);    final CountDownLatch done = new CountDownLatch(length);    for (final Callable<T> callable : callableList) {      executorService.execute(new Runnable() {        @Override        public void run() {          ready.countDown();          try {            start.await();            T t = callable.call();            result.add(t);          } catch (Exception e) {            // interrupt when exception            Thread.currentThread().interrupt();            // set null mean exception            result.add(null);            e.printStackTrace();          } finally {            done.countDown();          }        }      });    }    ready.await();    long startnano = System.nanoTime();    start.countDown();    done.await();    long cause = System.nanoTime() - startnano;    System.out.println(String.format("Promise all done,cause time millSecond: %s", cause / 1000000));    return result;  }}

效果

測試

public void promiseAllTest() throws Exception{  List<Callable<String>> callables = new ArrayList<>();  for (int i = 0; i < 10; i++) {    int finalI = i;    callables.add(new Callable<String>() {      @Override      public String call() throws Exception {        int millis = new Random().nextInt(10000);        Thread.sleep(millis);        System.out.println(String.format("thread%s sleep %s millis" ,finalI,millis));        return "Thread" + finalI;      }    });  }  List<String> result = Promise.all(callables);  System.out.println(result);  System.out.println("done...");}

測試結果

thread1 sleep 732 millis
thread2 sleep 758 millis
thread7 sleep 976 millis
thread8 sleep 1397 millis
thread5 sleep 1513 millis
thread0 sleep 2221 millis
thread3 sleep 4885 millis
thread6 sleep 5221 millis
thread4 sleep 7101 millis
thread9 sleep 7634 millis
Promise all done,cause time millSecond: 7638
[Thread1, Thread2, Thread7, Thread8, Thread5, Thread0, Thread3, Thread6, Thread4, Thread9]
done...

總結

本文只是通過原生Java實現簡單版本的Promise.all(),可用于簡單的并發編程,但是對于實際高并發應用還需要優化,如對線程池的優化,還有中斷的處理等。

參考

《Effective Java》第二版第十章第69條:并發工具優先于wait和notify

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VeVb武林網。


注:相關教程知識閱讀請移步到JAVA教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品免费在线免费| 国产精品久久久久久久久免费看| 美女少妇精品视频| 日韩最新av在线| 亚洲国产成人在线播放| 久热精品视频在线观看| 久久久久久尹人网香蕉| 国产日韩欧美综合| 欧美激情极品视频| 成人网在线免费观看| 久久精品国产久精国产一老狼| 91免费在线视频网站| 亚洲黄色av女优在线观看| www.亚洲免费视频| 国产91精品视频在线观看| 日韩有码视频在线| 欧美一级bbbbb性bbbb喷潮片| 亚洲黄一区二区| 91精品国产91久久久久福利| 日韩亚洲欧美成人| 在线免费看av不卡| 亚洲欧美国产精品| 亚洲精品国产综合区久久久久久久| 2019中文字幕在线| 亚洲新声在线观看| 日韩中文第一页| 孩xxxx性bbbb欧美| 在线视频欧美日韩精品| 国产精品入口日韩视频大尺度| 日韩成人在线免费观看| 国产91精品高潮白浆喷水| 成人久久久久久| 亚洲国产一区二区三区四区| 国产精品欧美一区二区三区奶水| 亚洲欧美精品一区二区| 狠狠躁夜夜躁人人爽天天天天97| 国产精品久久久久影院日本| 日韩中文在线中文网在线观看| 欧美一级淫片videoshd| 久久精品视频在线| 久久中文字幕在线视频| 久久综合亚洲社区| 97成人精品区在线播放| 98午夜经典影视| 国产精品久久97| 久久在精品线影院精品国产| 国产精品入口尤物| 高清视频欧美一级| 26uuu国产精品视频| 国产精品草莓在线免费观看| 在线亚洲男人天堂| 欧美成人在线免费视频| 成人xvideos免费视频| 欧美亚洲另类激情另类| 欧美日韩亚洲一区二| 欧美激情国产日韩精品一区18| 欧美日韩在线第一页| 亚洲精品国产拍免费91在线| 日韩综合视频在线观看| 92看片淫黄大片看国产片| 中文字幕亚洲欧美| 亚洲国产成人在线播放| 日本不卡高字幕在线2019| 日韩国产中文字幕| 精品国产91乱高清在线观看| 麻豆国产va免费精品高清在线| 欧美国产中文字幕| 中文字幕视频一区二区在线有码| 96pao国产成视频永久免费| 国产精品欧美一区二区三区奶水| 亚洲电影免费观看高清完整版在线| 国产精品免费久久久久久| 亚洲国产欧美一区二区三区久久| 欧美性猛交视频| 国产精品一区二区三| 国产区精品在线观看| 深夜福利一区二区| 91久久综合亚洲鲁鲁五月天| 日韩av一卡二卡| 亚洲视频欧美视频| 国产精品第一页在线| 日韩女优人人人人射在线视频| 亚洲欧美成人在线| 中文字幕不卡在线视频极品| 亚洲男人av在线| 欧美性在线视频| 国产成人精品国内自产拍免费看| 深夜福利日韩在线看| 日韩欧美中文字幕在线观看| 久久亚洲精品视频| 色综合影院在线| 国产精品永久免费观看| 色偷偷9999www| 国产这里只有精品| zzijzzij亚洲日本成熟少妇| 亚洲午夜女主播在线直播| 日韩欧美亚洲范冰冰与中字| 亚洲精品一区二区在线| 日韩欧美精品网址| 78色国产精品| 欧美成人精品三级在线观看| 国产91色在线|免| 亚洲精品91美女久久久久久久| 久久综合电影一区| 最近2019中文字幕大全第二页| 久久久久久久国产精品| 一区二区三区国产视频| 亚洲色图第三页| 欧美国产第二页| 欧美性视频网站| 不卡毛片在线看| 日本高清+成人网在线观看| 亚洲精品日韩丝袜精品| 久久久久久久久久久91| 亚洲影院高清在线| 久久这里有精品视频| 亚洲国产高清自拍| 欧美成aaa人片在线观看蜜臀| 精品久久久久久久中文字幕| 中文字幕av一区二区三区谷原希美| 日本19禁啪啪免费观看www| 伦伦影院午夜日韩欧美限制| 在线看片第一页欧美| 久久久久久久久久久免费精品| 亚洲国产精品电影| 精品福利一区二区| 国产精品成av人在线视午夜片| 亚洲欧美日韩在线一区| 国外日韩电影在线观看| 国外成人在线视频| 欧美第一黄色网| 日韩高清av在线| 亚洲二区中文字幕| 亚洲性视频网站| 中文字幕日韩电影| 久久精品视频导航| 亚洲毛茸茸少妇高潮呻吟| 亚洲美女又黄又爽在线观看| 欧美久久久精品| 5252色成人免费视频| 国产精品美女在线观看| 欧美亚州一区二区三区| 疯狂蹂躏欧美一区二区精品| 性日韩欧美在线视频| 亚洲黄色在线看| 日韩一区二区三区xxxx| 日韩av在线电影网| 高清一区二区三区日本久| 91久久久久久久| 亚洲有声小说3d| 这里只有精品在线观看| 国产精品嫩草影院久久久| 亚洲国产精品小视频| 中文字幕av一区中文字幕天堂| 91大神在线播放精品| 日韩大陆欧美高清视频区| 97国产真实伦对白精彩视频8| 国产亚洲日本欧美韩国| 欧美一乱一性一交一视频| 国产原创欧美精品| 欧美xxxx14xxxxx性爽| 美女视频黄免费的亚洲男人天堂| 国内精品久久久久久中文字幕| 国产精品香蕉在线观看|