CompletableFuture 是java.util.concurrent 套件的一部分,提供了一種以更具可讀性和可維護性的方式編寫非同步、非阻塞程式碼的方法。它代表非同步計算的未來結果。
從 CompletableFuture 開始,您可以建立一個簡單的非同步任務。這是一個例子:
import java.util.concurrent.CompletableFuture; public class CompletableFutureExample { public static void main(String[] args) { CompletableFuture<Void> future = CompletableFuture.runAsync(() -> { System.out.println("Running asynchronously..."); // Simulate a long-running task try { Thread.sleep(2000); } catch (InterruptedException e) { e.printStackTrace(); } }); future.join(); // Wait for the task to complete System.out.println("Task completed."); } }
示範結果:
Running asynchronously... Task completed.
您也可以使用CompletableFuture傳回非同步任務的結果:
import java.util.concurrent.CompletableFuture; public class CompletableFutureWithResult { public static void main(String[] args) { CompletableFuture<Integer> future = CompletableFuture.supplyAsync(() -> { // Simulate a computation return 5 * 5; }); future.thenAccept(result -> { System.out.println("The result is: " + result); }).join(); } }
示範結果:
The result is: 25
處理多個非同步任務是一個常見的用例。 CompletableFuture 提供了多種組合 future 的方法。
您可以組合多個 CompletableFutures 的結果:
import java.util.concurrent.CompletableFuture; public class CombiningFutures { public static void main(String[] args) { CompletableFuture<Integer> future1 = CompletableFuture.supplyAsync(() -> 5); CompletableFuture<Integer> future2 = CompletableFuture.supplyAsync(() -> 10); CompletableFuture<Integer> combinedFuture = future1.thenCombine(future2, (result1, result2) -> result1 + result2); combinedFuture.thenAccept(result -> { System.out.println("Combined result: " + result); }).join(); } }
示範結果:
Combined result: 15
當需要等待多個 future 完成時,使用 CompletableFuture.allOf():
import java.util.concurrent.CompletableFuture; public class AllOfExample { public static void main(String[] args) { CompletableFuture<Void> future1 = CompletableFuture.runAsync(() -> { // Simulate task try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } }); CompletableFuture<Void> future2 = CompletableFuture.runAsync(() -> { // Simulate another task try { Thread.sleep(2000); } catch (InterruptedException e) { e.printStackTrace(); } }); CompletableFuture<Void> allOfFuture = CompletableFuture.allOf(future1, future2); allOfFuture.join(); System.out.println("All tasks completed."); } }
示範結果:
All tasks completed.
處理錯誤在非同步程式設計中至關重要。 CompletableFuture 提供了管理異常的方法。
使用異常()處理非同步任務中的異常:
import java.util.concurrent.CompletableFuture; public class ExceptionHandlingExample { public static void main(String[] args) { CompletableFuture<Integer> future = CompletableFuture.supplyAsync(() -> { throw new RuntimeException("Something went wrong!"); }).exceptionally(ex -> { System.out.println("Exception occurred: " + ex.getMessage()); return null; }); future.join(); } }
示範結果:
Exception occurred: Something went wrong!
在本指南中,我們探討如何使用 CompletableFuture 處理 Java 中的並發請求。從建立簡單的非同步任務到組合多個 future 和處理錯誤,CompletableFuture 提供了一種健壯且靈活的非同步程式設計方法。
如果您有任何疑問或需要進一步協助,請隨時在下面發表評論。我很樂意提供協助!
閱讀更多文章:使用 Completable Future 處理 Java 中的多執行緒
以上是使用 Completable Future 處理 Java 中的多執行緒的詳細內容。更多資訊請關注PHP中文網其他相關文章!