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 廣告
資料結構
網路
關係資料庫管理系統
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP