欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

java使用CompletableFuture分批處理任務實現(xiàn)

 更新時間:2024年07月26日 08:33:12   作者:呦,又寫B(tài)UG呢  
本文主要介紹了java使用CompletableFuture分批處理任務實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

一、無返回值任務函數(shù)

// 數(shù)據(jù)分批
List<List<StatisticsDTO>> batches = Lists.partition(statisticsList, BATCH_SIZE);
List<CompletableFuture<Void>> futures = new ArrayList<>(batches.size());

// 數(shù)據(jù)處理
for (int i = 0; i < batches.size(); i++) {
    logger.info("批次 " + i + " 開始處理...");
    String logId = LogIdThreadLocal.getLogId();  // 傳遞主線程的 logId
    List<StatisticsDTO> batchData = batches.get(i);
    CompletableFuture<Void> future = CompletableFuture.runAsync(() -> {
        try {
            LogIdThreadLocal.setLogId(logId);
            processBatch(batchData);
        } finally {
            LogIdThreadLocal.clean();
        }
    });
    futures.add(future);
}

// 等待所有的異步任務完成
CompletableFuture<Void> allOf = CompletableFuture.allOf(futures.toArray(new CompletableFuture[0]));
allOf.join();

二、帶返回值任務函數(shù)

// 數(shù)據(jù)分批
List<List<StatisticsDTO>> batches = Lists.partition(statisticsList, BATCH_SIZE);
List<CompletableFuture<List<StatisticsDTO>>> futures = new ArrayList<>(batches.size());

// 數(shù)據(jù)處理
for (int i = 0; i < batches.size(); i++) {
    logger.info("批次 " + i + " 開始處理...");
    String logId = LogIdThreadLocal.getLogId();  // 傳遞主線程的 logId
    List<StatisticsDTO> batchData = batches.get(i);
    CompletableFuture<List<DoctorAvatarAnalysisDTO>> future = CompletableFuture.supplyAsync(() -> {
        try {
            LogIdThreadLocal.setLogId(logId);
            return processBatch(batchData);
        } finally {
            LogIdThreadLocal.clean();
        }
    });
    futures.add(future);
}

// 等待所有 CF 完成并合并結(jié)果
CompletableFuture<Void> allOf = CompletableFuture.allOf(futures.toArray(new CompletableFuture[0]));
List<StatisticsDTO> result = allOf.thenApply(
        v -> futures.stream().map(CompletableFuture::join).flatMap(List::stream).collect(Collectors.toList())
).join();

到此這篇關(guān)于java使用CompletableFuture分批處理任務實現(xiàn)的文章就介紹到這了,更多相關(guān)java CompletableFuture分批處理內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • SpringBoot+WebSocket向前端推送消息的實現(xiàn)示例

    SpringBoot+WebSocket向前端推送消息的實現(xiàn)示例

    WebSocket是一種在單個TCP連接上進行全雙工通信的協(xié)議,允許服務器主動向客戶端推送信息,同時也能從客戶端接收信息,本文主要介紹了SpringBoot+WebSocket向前端推送消息的實現(xiàn)示例,感興趣的可以了解一下
    2024-08-08
  • java方法替換word文檔中需要替換的部分操作步驟

    java方法替換word文檔中需要替換的部分操作步驟

    這篇文章主要介紹了java方法替換word文檔中需要替換的部分操作的相關(guān)資料,需要的朋友可以參考下,包括引入依賴、創(chuàng)建業(yè)務方法、測試以及擴展功能,需要的朋友們可以參考下
    2024-12-12
  • 基于Java設計一個高并發(fā)的秒殺系統(tǒng)

    基于Java設計一個高并發(fā)的秒殺系統(tǒng)

    這篇文章主要為大家詳細介紹了如何基于Java設計一個高并發(fā)的秒殺系統(tǒng),文中的示例代碼講解詳細,具有一定的借鑒價值,有需要的小伙伴可以參考下
    2023-10-10
  • Java基礎知識精通二維數(shù)組的應用

    Java基礎知識精通二維數(shù)組的應用

    為了方便組織各種信息,計算機常將信息以表的形式進行組織,然后再以行和列的形式呈現(xiàn)出來。二維數(shù)組的結(jié)構(gòu)決定了其能非常方便地表示計算機中的表,以第一個下標表示元素所在的行,第二個下標表示元素所在的列。下面簡單了解一下二維數(shù)組,包括數(shù)組的聲明和初始化
    2022-04-04
  • Java 初識CRM之項目思路解析

    Java 初識CRM之項目思路解析

    本篇文章意在幫助大家了解CRM的一些基本概念,介紹相關(guān)業(yè)務,后文也將會將基于筆者所在公司的業(yè)務詳細闡述CRM各模塊,感興趣的朋友快來看看吧
    2021-11-11
  • springboot中使用Hibernate-Validation校驗參數(shù)詳解

    springboot中使用Hibernate-Validation校驗參數(shù)詳解

    這篇文章主要為大家介紹了springboot中使用Hibernate-Validation校驗參數(shù)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-07-07
  • 一文讀懂JavaWeb前后端數(shù)據(jù)交互

    一文讀懂JavaWeb前后端數(shù)據(jù)交互

    本文主要介紹了一文讀懂JavaWeb前后端數(shù)據(jù)交互,包括HTTP請求與響應、JSON數(shù)據(jù)格式以及常用的數(shù)據(jù)傳輸技術(shù),具有一定的參考價值,感興趣的可以了解一下
    2024-01-01
  • java封裝類型與基礎類型對比示例分析

    java封裝類型與基礎類型對比示例分析

    這篇文章主要為大家介紹了java封裝類型與基礎類型對比示例分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-11-11
  • 詳細SpringBoot生命周期接口的使用

    詳細SpringBoot生命周期接口的使用

    本文主要介紹了SpringBoot生命周期接口的使用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-05-05
  • java中進程與線程_三種實現(xiàn)方式總結(jié)(必看篇)

    java中進程與線程_三種實現(xiàn)方式總結(jié)(必看篇)

    下面小編就為大家?guī)硪黄猨ava中進程與線程_三種實現(xiàn)方式總結(jié)(必看篇)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-06-06

最新評論