Java 9 中 orTimeout() 和 completeOnTimeOut() 方法之間的區別?
orTimeout() 和 completeOnTimeOut() 這兩個方法都在 CompletableFuture 類中定義,並且這兩個方法是在 Java 9 中引入的。orTimeout() 方法可用於指定給定的任務如果沒有在特定時間段內完成,程式將停止執行並丟擲 TimeoutException ,而 completeOnTimeOut() 方法則使用提供的值完成 CompletableFuture 。 如果沒有,則在給定的超時時間之前完成。
orTimeout() 語法
public CompletableFuture<T> orTimeout(long timeout, TimeUnit unit)
示例
import java.util.concurrent.CompletableFuture; import java.util.concurrent.TimeUnit; public class OrTimeoutMethodTest { public static void main(String args[]) throws InterruptedException { int a = 10; int b = 15; CompletableFuture.supplyAsync(() -> { try { TimeUnit.SECONDS.sleep(5); } catch(InterruptedException e) { e.printStackTrace(); } return a + b; }) .orTimeout(4, TimeUnit.SECONDS) .whenComplete((result, exception) -> { System.out.println(result); if(exception != null) exception.printStackTrace(); }); TimeUnit.SECONDS.sleep(10); } }
輸出
25
completeOnTimeOut() 語法
public CompletableFuture<T> completeOnTimeout(T value, long timeout, TimeUnit unit)
示例
import java.util.concurrent.CompletableFuture; import java.util.concurrent.TimeUnit; public class CompleteOnTimeOutMethodTest { public static void main(String args[]) throws InterruptedException { int a = 10; int b = 15; CompletableFuture.supplyAsync(() -> { try { TimeUnit.SECONDS.sleep(5); } catch(InterruptedException e) { e.printStackTrace(); } return a + b; }) .completeOnTimeout(0, 4, TimeUnit.SECONDS) .thenAccept(result -> System.out.println(result)); TimeUnit.SECONDS.sleep(10); } }
輸出
25
Advertisement 廣告