Java中的CompletableFuture超時使用
我喜歡Java 8的CompletableFuture,但它有它的缺點: 慣用的超時處理就是其中之一。
幸運的是,JDK 9帶來了兩種新方法,可以為每個人提供渴望的功能 - 這對於確保在使用非同步處理時的正確彈性至關重要。
在這篇超短篇文章中,嘗試幫助大家對這個新API方法的認識。
由於設定了timeout為1秒,那麼在get那裡等待1秒後拋錯
超時1秒後不是報錯,而是返回了預設的42這個值,前提條件是你必須預設預設值。
就這麼簡單,雖然我不一定喜歡我們總是被迫預先計算預設值的事實。
完整原始碼:
幸運的是,JDK 9帶來了兩種新方法,可以為每個人提供渴望的功能 - 這對於確保在使用非同步處理時的正確彈性至關重要。
在這篇超短篇文章中,嘗試幫助大家對這個新API方法的認識。
CompletableFuture#orTimeout
簡單地說,在呼叫上述方法之後,如果未在指定的超時內完成,將來會丟擲ExecutionException。
一個簡單的例子:
CompletableFuture<Integer> future = CompletableFuture.supplyAsync(this::computeEndlessly) .orTimeout(1, TimeUnit.SECONDS); future.get(); // java.util.concurrent.ExecutionException after waiting for 1 second <p class="indent"> |
由於設定了timeout為1秒,那麼在get那裡等待1秒後拋錯
CompletableFuturecompleteOnTimeout
在這種情況下,我們可以在達到超時後返回預設值:
CompletableFuture<Integer> future = CompletableFuture.supplyAsync(this::computeEndlessly) .completeOnTimeout(42, 1, TimeUnit.SECONDS); Integer result = future.get(); // 42 <p class="indent"> |
超時1秒後不是報錯,而是返回了預設的42這個值,前提條件是你必須預設預設值。
就這麼簡單,雖然我不一定喜歡我們總是被迫預先計算預設值的事實。
完整原始碼:
相關文章
- Java CompletableFuture 非同步超時實現探索Java非同步
- Java中ExecutorService與CompletableFuture指南Java
- java之使用CompletableFuture入門2Java
- Java中CompletableFuture的thenApply與thenApplyAsync比較JavaAPP
- Java 8 CompletableFutureJava
- Java中的任務超時處理Java
- Java 8 CompletableFuture 教程Java
- Java8 CompletableFutureJava
- Java中的非同步程式設計與CompletableFuture應用Java非同步程式設計
- Java中CompletableFuture中4種非同步程式設計方法Java非同步程式設計
- CompletableFuture 使用指南
- CompletableFuture 使用總結
- Java8的CompletableFuture進階之道Java
- Java中CompletableFuture與虛擬執行緒比較Java執行緒
- completablefuture-examples:Java 20個CompletableFuture API案例程式碼片段JavaAPI
- Java8 CompletableFuture 程式設計Java程式設計
- Java 9 CompletableFuture 進化小腳步Java
- Java8 CompletableFuture非同步任務Java非同步
- 保時捷:超80%中國保時捷車主使用iPhoneiPhone
- Redis中Lua指令碼的使用和設定超時坍淑Redis指令碼
- CompletableFuture
- Java非同步程式設計:CompletableFuture與Future的對比Java非同步程式設計
- CompletableFuture中實現多個 REST 呼叫REST
- CompletableFuture 的 20 個例子
- Future和CompletableFuture的理解
- CompletableFuture Demo
- Java中BasicNameValuePair的使用JavaAI
- Java 中 RMI 的使用Java
- java中的時間運算Java
- Java 中的時間日期 APIJavaAPI
- 【Java分享客棧】一文搞定CompletableFuture並行處理,成倍縮短查詢時間。Java並行
- 多執行緒系列(二十) -CompletableFuture使用詳解執行緒
- Java傳送郵件必帶超時時間配置Java
- CompletableFuture 專題
- CompletableFuture基本用法
- CompletionService和CompletableFuture
- java中Cglib代理的使用JavaCGLib
- Java中的Reference類使用Java