【问题标题】: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();
}

【讨论】:

    猜你喜欢
    • 2014-01-21
    • 2012-06-05
    • 2019-07-03
    • 1970-01-01
    • 1970-01-01
    • 2011-02-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多