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 CompletableFuture 非同步超時實現探索Java非同步
- Java中ExecutorService與CompletableFuture指南Java
- java之使用CompletableFuture入門2Java
- Java中的任務超時處理Java
- Java 8 CompletableFutureJava
- Java中CompletableFuture的thenApply與thenApplyAsync比較JavaAPP
- Java 8 CompletableFuture 教程Java
- Java8 CompletableFutureJava
- Java CompletableFuture 詳解Java
- Java中的非同步程式設計與CompletableFuture應用Java非同步程式設計
- Java中CompletableFuture與虛擬執行緒比較Java執行緒
- CompletableFuture 使用總結
- CompletableFuture 使用指南
- Java8的CompletableFuture進階之道Java
- completablefuture-examples:Java 20個CompletableFuture API案例程式碼片段JavaAPI
- Java8 CompletableFuture 程式設計Java程式設計
- thrift中的超時(timeout)坑
- Redis中Lua指令碼的使用和設定超時坍淑Redis指令碼
- Java 9 CompletableFuture 進化小腳步Java
- Java8 CompletableFuture非同步任務Java非同步
- 不同使用者,不同的session超時時間Session
- CompletableFuture中實現多個 REST 呼叫REST
- java定時器的使用Java定時器
- Java非同步程式設計:CompletableFuture與Future的對比Java非同步程式設計
- Java 中的時間日期 APIJavaAPI
- java中的時間運算Java
- Java中BasicNameValuePair的使用JavaAI
- Java 中 RMI 的使用Java
- CompletableFuture Demo
- Java8新的非同步程式設計方式 CompletableFuture(二)Java非同步程式設計
- Java8新的非同步程式設計方式 CompletableFuture(三)Java非同步程式設計
- Java8新的非同步程式設計方式 CompletableFuture(一)Java非同步程式設計
- Java傳送郵件必帶超時時間配置Java
- Future和CompletableFuture的理解
- 【轉】JAVA處理執行緒超時Java執行緒
- 網路程式設計中的超時檢測程式設計
- Java 操作PDF中的超連結——新增、更新、刪除超連結Java