線程池異步處理

List<CompletableFuture<Void>> futures = new ArrayList<>();// 提交10個異步任務
for (int i = 0; i < 10; i++) {CompletableFuture<Void> future = CompletableFuture.runAsync(() -> {insertData(batchData); // 每個任務插入一批數據}, pool).thenAccept();futures.add(future); // 將Future對象存入列表
}// 等待所有任務完成
CompletableFuture.allOf(futures.toArray(new CompletableFuture[0])).join();

通過CompletableFuture或回調函數,調用線程無需等待任務完成,實現真正的異步Future

ExecutorService pool = Executors.newFixedThreadPool(2);
List<CompletableFuture<Void>> futures = new ArrayList<>();for (int i = 1; i <= 3; i++) {int taskId = i;CompletableFuture<Void> future = CompletableFuture.supplyAsync(() -> {Thread.sleep(1000);return "Result-" + taskId;}, pool).thenAccept(result -> {System.out.println("[Callback] Task " + taskId + " => " + result);});futures.add(future); // 保存Future對象
}// 等待所有任務完成(阻塞主線程)
CompletableFuture.allOf(futures.toArray(new CompletableFuture[0])).join();
pool.shutdown();
System.out.println("所有任務完成!");

沒有future會咋樣?

(1) 主線程不會等待任務完成
(2) 無法統一處理任務狀態
  • 失去的能力

    • 無法通過?CompletableFuture.allOf()?等待所有任務完成。

    • 無法統計成功/失敗的任務數量。

無法集中處理異常(如記錄失敗日志或重試)

Q:我都要主線程等待了,為啥還用異步,直接用普通線程池不就行了

使用?異步任務(如?CompletableFuture)+ 主線程等待?相比?普通線程池阻塞等待,在以下場景中具有顯著優勢:

  1. 靈活組合任務:可輕松實現“任務并行→結果聚合”的流程(如?allOf/anyOf)。

  2. 非阻塞回調:即使主線程等待,仍能通過回調處理中間結果(如進度更新)。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/85798.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/85798.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/85798.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

STM32HAL庫 -- 8.串口UART通信并開啟printf功能

目錄 1.簡介 2.串口和UART 2.1串口的簡介 2.2UART的簡介 2.3UART通信協議 2.3.1波特率 2.3.2空閑位 2.3.3起始位 2.3.4數據位 2.3.5校驗位 2.3.6停止位 3.STM32的UART 4.HAL庫中常用的操作UART的函數 4.1UART初始化函數 -- HAL_UART_Init 4.2硬件初始化回調函數…

【PyTorch項目實戰】CycleGAN:無需成對訓練樣本,支持跨領域圖像風格遷移

文章目錄 一、風格遷移模型&#x1f3a8;1、發展時間線2、分類與優缺點3、選擇建議4、HuggingFace Demo&#xff08;instruct-pix2pix&#xff09; —— 在線測試 二、論文簡讀&#xff08;1&#xff09;FastStyleTransfer&#xff08;快速風格遷移&#xff0c;Johnson et al.,…

C#Halcon從零開發_Day14_AOI缺陷檢測策略1_Bolb分析+特征分析_餅干破損檢測

一、引言 *缺陷檢測策略1&#xff1a;Blob分析特征分析 *Blob分析&#xff1a;閾值分割、開閉運算 (1) 圖像預處理 目的&#xff1a;增強目標與背景的對比度&#xff0c;抑制噪聲。 常用算子&#xff1a; threshold()&#xff1a;通過閾值分割將圖像轉換為二值圖像。 mean_…

18年磨一劍!開利科技啟動數字化增量投資新時代

當傳統營銷陷入流量困局&#xff0c;當數字化轉型變成"面子工程"&#xff0c;廣州開利網絡用18年技術積淀給出新答案——"蚓鏈數字化生態營銷系統"&#xff0c;讓企業不再為數字化而數字化&#xff0c;而是通過數字化實現利潤增長&#xff01; 核心亮點&am…

65-Oracle Undo機制

前一期看了Oracle在redo上保持事務前滾的一致性&#xff0c;同樣Oracle在Undo的管理機制也是現代事務型數據庫的工程典范。核心在于通過多版本并發控制&#xff08;MVCC&#xff09;技術&#xff0c;在保障數據一致性與提升系統性能之間實現精妙平衡。Undo機制構建了原子事務的…

【ESP32攝像頭開發實例】-實現遙控視頻小車

ESP32-CAM實現遙控視頻小車 文章目錄 ESP32-CAM實現遙控視頻小車1、硬件準備2、代碼實現3、代碼解析4、程序下載到開發板在本文中,將詳細介紹如何使用ESP32-CAM制作一輛Wi-Fi遠程控制的小車。 1、硬件準備 在開始這個項目之前,我們將強調用于構建機器人的最重要的特性和組件…

圖片加載優化(縮略圖)

縮略圖 系統目前的問題&#xff1a;首頁直接加載原圖&#xff0c;原圖文件通常比縮略圖大數倍甚至數十倍&#xff0c;不僅導致加載時間長&#xff0c;還會造成大量流量浪費。 解決方案&#xff1a;上傳圖片時&#xff0c;同時生成一份較小尺寸的縮略圖。用戶瀏覽圖片列表時加…

GO語言---數組

文章目錄 數組的基本特性數組的聲明和初始化數組元素的訪問和操作數組遍歷多維數組數組的長度和容量數組作為函數參數數組與切片的區別注意 數組是Go語言中最基本的數據結構之一&#xff0c;它是一組相同類型元素的固定長度序列。 數組的基本特性 1、固定長度&#xff1a;數組…

7.5.3_1處理沖突的方法-拉鏈法

知識總覽&#xff1a; 拉鏈法&#xff1a; 開始散列表中沒有存儲任何數據元素即散列地址上的元素是空的&#xff0c;散列地址可以視為鏈表的頭指針&#xff0c;即沒有插入任何元素前鏈表的頭指針是空的。一個散列地址對應一個鏈表&#xff0c;散列地址上實際沒有存數據元素&am…

鴻蒙運動項目開發:項目運行環境切換器

##鴻蒙核心技術##運動開發# 在開發鴻蒙運動項目時&#xff0c;管理不同運行環境&#xff08;如開發環境、測試環境、生產環境&#xff09;是一個常見的需求。通過合理地切換運行環境&#xff0c;開發者可以方便地進行調試、測試和部署。本文將介紹如何實現一個項目運行環境切換…

Linux內核中安全創建套接字:為何inet_create未導出及正確替代方案

引言 在Linux內核開發中,當驅動程序需要創建網絡套接字時,開發者常會遇到一個關鍵問題:核心函數inet_create(負責初始化IPv4套接字)并未導出到內核符號表。本文深入剖析這一設計決策背后的邏輯,并提供驅動程序安全創建套接字的實踐方案。 一、inet_create未導出的深層原…

63、不同路徑II

題目 解答&#xff1a; 初始化和特殊情況比較麻煩的dp obstacleGrid(0,0)1的&#xff0c;直接return 0即可。入口都被堵住了還怎么走。 mn1情況&#xff0c;直接判斷 第一行初始化&#xff1a;dp[1][0]->dp[i][0] 碰到有障礙物的&#xff0c;從當前格子開始到末尾全部置…

wx小程序登錄設置角色

背景。pc端登錄后在訪問業務鏈接時可以根據固定獲取用戶的方法LoginUser user LoginHelper.getLoginUser(); 獲取到用戶信息。但wx端登錄后無法獲取。原因處在登陸時對用戶信息的設置方面pc端和小程序端登錄沒有使用相同的登錄方法。排除得知wx端小程序登錄時沒有設置角色。所…

MySQL5.7 慢查詢SQL語句集合

文章目錄 1. 按平均執行時間排序的慢查詢2. 按總執行時長排序的慢查詢3. MySQL 5.7 慢查詢配置檢查4. 掃描行數分析&#xff08;找出全表掃描&#xff09;5. 高頻執行的慢查詢6. 當前正在執行的查詢7. 慢查詢統計匯總8. 表結構和索引分析8.1 表索引詳情查詢8.2 表大小統計 1. 按…

MySQL學習(1)——基礎庫操作

歡迎來到博主的專欄:MySQL學習 博主ID:代碼小豪 文章目錄 數據庫原理基礎庫操作增刪數據庫數據庫編碼與校驗規則驗證不同的校驗規則對于庫中數據的影響 備份與恢復數據庫 數據庫原理 mysql版本:mysql8.0 操作系統:ubuntu22.4 為了減少由于環境配置以及權限限制帶來的使用問題&…

C++法則12:右值引用的核心目的:支持移動語義(Move Semantics)

C法則12&#xff1a;右值引用的核心目的&#xff1a;支持移動語義&#xff08;Move Semantics&#xff09; 右值引用&#xff08;Rvalue Reference&#xff09;是C11引入的最重要特性之一&#xff0c;其主要設計目的就是支持移動語義&#xff08;Move Semantics&#xff09;。 …

【LLM學習筆記4】使用LangChain開發應用程序(上)

目錄 前言一、模型、提示和解析器&#xff08;model、prompt、parsers&#xff09;二、儲存三、模型鏈四、基于文檔的問答1.使用向量存儲查詢2. 結合表征模型和向量存儲使用檢索問答鏈回答問題 前言 在前面兩部分&#xff0c;我們分別學習了大語言模型的基礎使用準則&#xff…

Negative Contrastive Estimation Negative Sampling

1. 基本概念與問題背景 1.1 大規模分類問題 在自然語言處理中&#xff0c;給定上下文 c c c預測單詞 w w w的條件概率為&#xff1a; P ( w ∣ c ) exp ? ( s θ ( w , c ) ) ∑ w ′ ∈ V exp ? ( s θ ( w ′ , c ) ) P(w|c) \frac{\exp(s_\theta(w,c))}{\sum_{w\in V…

Flink SQL Connector Kafka 核心參數全解析與實戰指南

Flink SQL Connector Kafka 是連接Flink SQL與Kafka的核心組件&#xff0c;通過將Kafka主題抽象為表結構&#xff0c;允許用戶使用標準SQL語句完成數據讀寫操作。本文基于Apache Flink官方文檔&#xff08;2.0版本&#xff09;&#xff0c;系統梳理從表定義、參數配置到實戰調優…

vscode內嵌瀏覽器實時預覽vue項目

安裝插件 web Preview 啟動vue項目 打開預覽 ctrl shift p 之后輸入并選擇 Open Web Preview 即可看到預覽窗口&#xff0c;但此時明明我的頁面是有內容的&#xff0c;但是窗口卻空白的。 因為默認訪問端口是3000&#xff0c;我們將其修改為vue項目默認的5173端口即可。 點…