CompletableFuture的使用

CompletableFuture 是 Java 8 引入的異步編程工具,通過鏈式調用和非阻塞操作簡化多線程任務編排。

創建異步任務

1.帶返回值的任務

CompletableFuture<String> future = CompletableFuture.supplyAsync(() -> "Hello");

2. ?無返回值的任務
使用 runAsync(),適用于僅執行操作的場景:

CompletableFuture<Void> future = CompletableFuture.runAsync(() -> System.out.println("Running"));

3. ?自定義線程池
默認使用 ForkJoinPool.commonPool(),可通過參數指定自定義線程池優化資源管理:

這里可以結合spring 定義全局線程池來實現統一管理, 使用時將容器中的executor當做入參即可

ExecutorService executor = Executors.newCachedThreadPool();
CompletableFuture.supplyAsync(() -> "Task", executor);

鏈式調用與任務組合

1. ?結果轉換
thenApply():將前序結果轉換為新值:

future.thenApply(s -> s + " World"); // "Hello" → "Hello World"

2. 結果消費
thenAccept():僅消費結果不返回新值:

future.thenAccept(System.out::println); // 輸出結果

3.? 任務串聯
thenCompose():將前序結果作為新異步任務的輸入:

future.thenCompose(s -> CompletableFuture.supplyAsync(() -> s.length()));

4. 并行合并結果
thenCombine():合并兩個獨立任務的結果:

future1.thenCombine(future2, (res1, res2) -> res1 + res2);

5. ?多任務協同
allOf():等待所有任務完成;
anyOf():等待任一任務完成。

CompletableFuture.allOf(future1, future2).thenRun(() -> System.out.println("All done"));

異常處理

捕獲異常并返回默認值
exceptionally():在異常時提供兜底結果:

future.exceptionally(ex -> "Fallback");

統一處理結果與異常
handle():無論成功或失敗均執行操作:

future.handle((res, ex) -> ex != null ? "Error" : res);

超時控制

使用 orTimeout() 設置任務超時,超時后拋出 TimeoutException:

CompletableFuture.supplyAsync(() -> "Task").orTimeout(500, TimeUnit.MILLISECONDS).exceptionally(ex -> "Timeout: " + ex.getMessage());

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

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

相關文章

GLB文件介紹

GLB文件是由支持glTF&#xff08;GL Transmission Format&#xff09;標準的軟件或工具生成的。glTF是一種開放的3D模型傳輸格式&#xff0c;而GLB是其二進制版本&#xff0c;通常用于嵌入紋理和模型數據。以下是常見的生成GLB文件的軟件和工具&#xff1a; 1. 3D建模軟件 ? …

計算機網絡的分類及其性能指標

一. 計算機網絡的分類 1. 按分布范圍分類 廣域網&#xff08;WAN&#xff09; 也稱遠程網。廣域網提供長距離通信&#xff0c;通常是幾十千米到幾千千米的區域&#xff0c;比如跨國通信。連接廣域網的各結點交換機的鏈路一般是高速鏈路&#xff0c;具有較大的通信容量城域網&…

gralloc usage flags

下面這些示例主要說明了 gralloc usage flags 在圖像處理和多媒體應用中如何影響性能和正確性。讓我們逐個詳細分析每個問題的 根因 和 修復方案&#xff0c;并深入解析 gralloc 標志對 緩存管理 和 數據流 的影響。 ? Example 1: 長曝光快照耗時異常 &#x1f4cc; 問題描述…

關于kafka的一些知識總結

Kafka 1. 基本知識 1.1 前置知識 topic表示一個類型/業務的數據的組為方便擴展&#xff0c;提高吞吐率&#xff0c;一個topic分為多個partition。配合分區的設計&#xff0c;提出消費者組的概念&#xff0c;每個消費者并行消費&#xff0c;同時&#xff0c;一個分區的數據&a…

深入理解traceroute命令及其原理

traceroute 是一個網絡診斷工具&#xff08;Windows上叫tracert&#xff09;&#xff0c;用于顯示數據包從本地主機到遠程主機經過的路由&#xff08;跳數&#xff09;。它可以幫助您了解數據包在網絡中的傳輸路徑&#xff0c;以及每跳的延遲情況。這對于網絡故障排除、分析網絡…

Spring 6: 3容器-Ioc

3、容器&#xff1a;IoC IoC 是 Inversion of Control 的簡寫&#xff0c;譯為“控制反轉”&#xff0c;它不是一門技術&#xff0c;而是一種設計思想&#xff0c;是一個重要的面向對象編程法則&#xff0c;能夠指導我們如何設計出松耦合、更優良的程序。 Spring 通過 IoC 容…

git推送代碼相關學習——(一)

推薦去閱讀一下廖老師的git相關的教程https://liaoxuefeng.com/books/git/introduction/index.html 這個系列就來學習一下git操作。 第一步&#xff0c;新建項目 去github中新建一個項目&#xff0c;然后依據項目來進行本地的開發工作。 第二步&#xff0c;拉取項目 git c…

2025年滲透測試面試題總結-某深信服-深藍攻防實驗室(題目+回答)

網絡安全領域各種資源&#xff0c;學習文檔&#xff0c;以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各種好玩的項目及好用的工具&#xff0c;歡迎關注。 目錄 深信服-深藍攻防實驗室 一、內網攻擊核心思路&#xff08;2025版&#xff09; 1. 攻擊階段分層 2. 最…

JAVA學習*Object類

Object類 Object類是所有類的父類 類中有一些方法&#xff08;都需要掌握&#xff09; toString()方法 在學習類的對象的時候有介紹過了&#xff0c;當我們重新給此方法就會打印類與對象的信息 equals()方法 在Java中的比較&#xff0c; 如果左右兩側是基本類型變量&#…

《Operating System Concepts》閱讀筆記:p471-p472

《Operating System Concepts》學習第 37 天&#xff0c;p471-p472 總結&#xff0c;總計 2 頁。 一、技術總結 1.NAS (1)定義 network-attached storage (NAS)&#xff1a;Storage accessed from a computer over a network. 雖然平時經常看到 NAS 這個名稱&#xff0c;之…

gonet開源游戲服務器環境配置

1.mysql搭建 搜索mysql-server apt安裝包名 sudo apt search mysql-server 安裝mysql-server sudo apt-get install mysql-server 安裝完成后會&#xff0c;啟動mysql服務及創建系統服務 查看服務狀態 systemctl status mysql.service 使用超級權限登陸mysql sudo mysql 授…

HarmonyOS NEXT(九) :圖形渲染體系

HarmonyOS NEXT&#xff08;九&#xff09; &#xff1a;圖形渲染體系 前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;可以分享一下給大家。點擊跳轉到網站。 https://www.captainbed.cn/ccc 文章目錄 HarmonyOS NEXT&#xff0…

網絡安全威脅與防護措施(上)

1. SQL注入&#xff08;SQL Injection&#xff09; SQL注入是一種常見的安全漏洞&#xff0c;攻擊者通過在用戶輸入中插入惡意的SQL代碼&#xff0c;從而篡改、操控數據庫&#xff0c;執行未授權的數據庫操作&#xff0c;如查詢、修改、刪除數據&#xff0c;甚至獲取系統控制權…

3.22模擬面試

前端模擬面試&#xff08;1 年經驗&#xff09; 面試時長&#xff1a;40-60 分鐘 面試難度&#xff1a;初中級 技術棧&#xff1a;Vue 3、TypeScript、微前端&#xff08;qiankun&#xff09;、Webpack/Rspack、Ant Design、組件庫遷移 一、基礎知識 HTML & CSS 介紹一下…

kotlin 函數引用

引言 先確認一下&#xff0c;什么叫做引用 Object obj new Object() //這里的obj就是一個強引用 再確認一個結論&#xff1a; lambda 屬于函數類型對象 。 fun methodResponseResult(msg: String , respo:(Int, String)->Unit){}fun methodRespoResunt(type: Int ,msg: S…

微前端qiankun框架的使用

文章描述 隨著工作時間的增加&#xff0c;發現公司的項目逐漸多了起來&#xff0c;有一個項目比較龐大&#xff0c;是需要集成多個子系統而形成的大項目。其中便是使用微前端的概念qiankun框架來集成其他多個子項目的。接下來&#xff0c;一起來看一下qiankun框架的具體使用方…

基于CVX優化器的儲能電池調峰調頻算法matlab仿真

目錄 1.課題概述 2.系統仿真結果 3.核心程序與模型 4.系統原理簡介 4.1 原理概述 4.2 CVX工具箱概述 5.完整工程文件 1.課題概述 基于CVX優化器的儲能電池調峰調頻算法matlab仿真。CVX 是一種用于求解凸優化問題的強大工具。凸優化問題具有良好的數學性質&#xff0c;能…

回歸——數學公式推導全過程

文章目錄 一、案例引入 二、如何求出正確參數 1. 最速下降法 1&#xff09;多項式回歸 2&#xff09;多重回歸 2. 隨機梯度下降法 一、案例引入 以Web廣告和點擊量的關系為例來學習回歸&#xff0c;假設投入的廣告費和點擊量呈現下圖對應關系。 思考&#xff1a;如果花了…

微服務中的服務發現

微服務中的服務發現 什么是服務發現 服務發現是微服務架構中的關鍵機制&#xff0c;用于確定各個微服務的地址。例如&#xff0c;在一個 API Server 服務中&#xff0c;我們可能需要調用 User 服務來處理用戶注冊、登錄和信息查詢&#xff0c;也可能需要 Product 服務來獲取商…

C#與西門子PLC的六大通信庫

C#與西門子PLC的六大通信庫&#xff1a; 一、S7.NET S7.NET是一款開源的S7協議通信庫&#xff0c;支持西門子S7通信。 二、Sharp7 Sharp7與S7.NET一樣&#xff0c;是一款.NET版本的S7通信庫。 三、Snap7 Snap7是一個開源的C通信庫&#xff0c;支持西門子S7通信。 四、Prodave P…