【问题标题】:Do we have alternative to Java 9 CompletableFuture methods to handle timeouts?我们是否有替代 Java 9 CompletableFuture 方法来处理超时?
【发布时间】:2022-12-15 06:47:52
【问题描述】:
我想要一种方法来处理可完成期货的超时(自定义值),如果有超时,我们可以为未来对象分配默认值。我知道在 Java 9 及更高版本中有几种方法可以处理它。
但是有没有类似于 Java 9 CompletableFuture 方法的替代方法
public CompletableFuture<T> completeOnTimeout(T value, long timeout, TimeUnit unit)
OR
public CompletableFuture<T> orTimeout(long timeout, TimeUnit unit)
【问题讨论】:
标签:
java
asynchronous
java-8
completable-future
【解决方案1】:
您可以使用ExecutorService,然后使用Future#get(long, TimeUnit)。如果我没记错的话,它们从 Java 1.5(第 5 版)开始可用。
final ExecutorService executorService = Executors.newSingleThreadExecutor();
final Future<String> future = executorService.submit(() -> {
Thread.sleep(1000L);
return "Success";
});
try {
final String result = future.get(1500L, TimeUnit.MILLISECONDS);
System.out.println(result);
} catch (InterruptedException | ExecutionException | TimeoutException e) {
System.out.println("Error");
} finally {
executorService.shutdown();
}