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