Java 9 中 orTimeout() 和 completeOnTimeOut() 方法之间的区别?
javaobject oriented programmingprogramming更新于 2025/7/13 4:28:17
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
Syntax for 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
相关文章
有用资源
java 参考教程 - 该教程包含有关 java 的更多信息:https://www.cainiaomax.com/java/

