實作非同步的資料處理管線
你正在建立一個分析儀表板,需要分別從不同服務擷取使用者資料與活動記錄,接著處理這些資料以產生使用者摘要。為了讓應用程式保持回應速度,此作業必須以非同步方式執行。你的任務是使用 CompletableFuture 來實作。
UserData 與 UserSummary 類別已為你預先載入。
本練習屬於課程
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) {}
}
}