Future 和 CompletableFuture 是 Java 中用於並發和多執行緒的工具。 Future 表示非同步計算結果,提供 get() 方法阻塞執行緒取得結果。 CompletableFuture 擴展了 Future,提供更豐富的功能,如組合計算、處理異常和使用回呼函數。
Java 函數的並發與多執行緒:使用Future 和CompletableFuture
概述
##Future 和CompletableFuture 是Java 8 中引入的並發工具,用於處理非同步操作和並發任務。它們允許您在不阻塞主執行緒的情況下執行長時間運行的操作,從而提高應用程式的效能和回應能力。 Future
Future 是表示非同步計算結果的物件。它提供了一個方法
get()
,用於阻塞當前線程直到結果可用。您也可以使用
方法來檢查計算是否完成。
CompletableFutureCompletableFuture 是 Future 的擴展,提供了更豐富的功能。它允許您組合非同步計算,處理異常,並使用回調函數。
實戰案例
考慮以下範例,使用
Future
來非同步載入檔案:
import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.Future; public class FileLoader { public static void main(String[] args) { ExecutorService executorService = Executors.newSingleThreadExecutor(); Future<String> future = executorService.submit(() -> { // 异步加载文件 return loadFile("file.txt"); }); // 继续执行其他任务,而不阻塞当前线程 // ... // 当需要结果时,再阻塞主线程获取结果 String result = future.get(); } private static String loadFile(String filePath) { // 模拟文件加载操作 return "File contents"; } }
在這個範例中,我們使用
ExecutorService### 建立了一個執行緒池,然後使用###submit()### 提交了一個非同步任務,該任務負責載入檔案。主執行緒繼續執行其他任務,而不阻塞等待檔案載入完成。最後,當需要檔案內容時,我們再呼叫 ###get()### 從 ###Future### 中取得結果。 #########使用CompletableFuture#########以下範例展示如何使用###CompletableFuture### 來組合非同步運算:###import java.util.concurrent.CompletableFuture; public class CompletableFutureExample { public static void main(String[] args) { // 定义第一个异步计算 CompletableFuture<Integer> firstResult = CompletableFuture.supplyAsync(() -> { // 计算第一个结果 return 5; }); // 定义第二个异步计算 CompletableFuture<Integer> secondResult = CompletableFuture.supplyAsync(() -> { // 计算第二个结果 return 10; }); // 组合两个计算,将它们的结果相加 CompletableFuture<Integer> combinedResult = firstResult.thenCombine(secondResult, (x, y) -> x + y); // 获取最终结果 int result = combinedResult.get(); } }
以上是Java函式的並發和多執行緒中如何使用Future和CompletableFuture?的詳細內容。更多資訊請關注PHP中文網其他相關文章!