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)示例
WebSocket是一種在單個TCP連接上進行全雙工通信的協(xié)議,允許服務器主動向客戶端推送信息,同時也能從客戶端接收信息,本文主要介紹了SpringBoot+WebSocket向前端推送消息的實現(xiàn)示例,感興趣的可以了解一下2024-08-08springboot中使用Hibernate-Validation校驗參數(shù)詳解
這篇文章主要為大家介紹了springboot中使用Hibernate-Validation校驗參數(shù)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-07-07java中進程與線程_三種實現(xiàn)方式總結(jié)(必看篇)
下面小編就為大家?guī)硪黄猨ava中進程與線程_三種實現(xiàn)方式總結(jié)(必看篇)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-06-06