開始使用免費開始

實作非同步的資料處理管線

你正在建立一個分析儀表板,需要分別從不同服務擷取使用者資料與活動記錄,接著處理這些資料以產生使用者摘要。為了讓應用程式保持回應速度,此作業必須以非同步方式執行。你的任務是使用 CompletableFuture 來實作。

UserDataUserSummary 類別已為你預先載入。

本練習屬於課程

Java 程式碼最佳化

檢視課程

練習說明

  • CompletableFuture 中加入擷取使用者資料的步驟。
  • CompletableFuture 中加入處理使用者資料的步驟。
  • CompletableFuture 中加入例外狀況處理。

動手互動練習

試著完成這個範例程式碼,體驗一下這個練習。

public class AsyncDashboard {
    public static void main(String[] args) throws Exception {        
        CompletableFuture userSummaryFuture = CompletableFuture
            // Fetch the user data
            .____(() -> fetchUserData("user123"))
            
            // Create summary based on fetched data
            .____(userData -> createSummary(userData))
            
            // Add exception handling
            .____(ex -> new UserSummary(new UserData("error", "Error User"))); 
        Thread.sleep(5000);
    }
    
    private static UserData fetchUserData(String userId) {
        simulateNetworkLatency(300);
        return new UserData(userId, "John Doe");
    }
    
    private static UserSummary createSummary(UserData userData) {
        simulateNetworkLatency(200);
        return new UserSummary(userData);
    }
    
    private static void simulateNetworkLatency(int millis) {
        try { Thread.sleep(millis); } catch (InterruptedException e) {}
    }
}
編輯並執行程式碼