Java Interview Question Series 4

https://levelup.gitconnected.com/java-interview-question-series-4-c540392aee70

CompletableFuture 在 Java 中的角色是提供了一種方便的方式來處理異步操作。它可以讓你執行可能需要很長時間才能完成的操作,而不會阻塞呼叫線程。

它的主要用途包括:

1. 異步操作:方便地執行異步任務,特別是涉及 I/O 操作或需要很長時間才能完成的任務,例如從遠程服務獲取數據、從文件讀取數據或執行長時間計算而不阻塞主線程。

2. 回調鏈:建立一系列操作,這些操作依賴於前一個任務的結果。可以通過 thenApply、thenCompose 和 thenAccept 等方法進行鏈接。

3. 結合多個任務:允許你觸發多個任務,在所有任務完成時執行某個操作(使用 allOf 方法),或者在其中任何一個任務完成時執行某個操作(使用 anyOf 方法)。

4. 錯誤處理:在處理異步任務時處理異常和錯誤,使你能夠從失敗中恢復。

5. 超時和完成:提供了方法來處理任務在指定時間內未完成的情況。

CompletableFuture 表示一個稍後完成的結果或等待完成的計算。它提供了各種方法來鏈接和組合異步操作,允許你根據異步計算的結果構建一個操作管道。

例如,你可以使用 supplyAsync 創建一個 CompletableFuture 來異步執行任務。這使你可以執行某個操作,然後在它完成後處理結果,使用像 thenApply、thenAccept、thenCompose 等方法。

以下是一個例子:

“`java
import java.util.concurrent.CompletableFuture;

public class CompletableFutureExample {
public static void main(String[] args) {
CompletableFuture future = CompletableFuture.supplyAsync(() -> “Hello”);

future.thenApply(s -> s + ” World”)
.thenAccept(System.out::println);
}
}
“`

在上面的例子中,使用 supplyAsync 創建了一個 CompletableFuture,然後使用 thenApply 來轉換結果,使用 thenAccept 來打印最終結果。這個操作鏈定了一系列的異步任務,它們會在前一個任務完成後依次執行。

CompletableFuture 的異步特性與它獨立於主線程執行操作的能力有關。在 CompletableFuture 的上下文中,使用像 thenApply、thenCompose 和其他鏈接方法的使用方式,允許你定義一系列在前一個任務完成時執行的操作,而不阻塞主線程的執行。

例如,當通過 CompletableFuture 執行一個方法時,調用 supplyAsync 方法的線程並不會被阻塞,直到任務完成。相反,它觸發任務並繼續執行。一旦任務完成操作,則在 thenApply 方法中定義的操作將被執行,而不需要等待主線程閒置,從而實現異步行為。

這在處理 I/O 操作、網絡請求或計算密集型任務時特別有用。它確保主線程可以繼續執行其他任務或響應其他事件,而不會被異步操作的完成所延遲。

via Programming on Medium

November 27, 2023 at 10:58AM

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *