来自Callable的CompletableFuture?

时间:2015-05-31 16:24:31

标签: java concurrency java-8 java.util.concurrent

今天我尝试使用Java 8中的“new”CompletableFuture,当我找不到runAsync(Callable)方法时发现自己很困惑。 我可以自己做,如下图所示,但为什么这(对我来说非常明显和有用的实用方法)缺失?我错过了什么?

public static <T> CompletableFuture<T> asFuture(Callable<? extends T> callable, Executor executor) {
    CompletableFuture<T> future = new CompletableFuture<>();
    executor.execute(() -> {
        try {
            future.complete(callable.call());
        } catch (Throwable t) {
            future.completeExceptionally(t);
        }
    });
    return future;
}

1 个答案:

答案 0 :(得分:5)

您应该使用supplyAsync(Supplier<U>)

通常,lambdas和checked异常不能很好地协同工作,CompletableFuture通过设计避免检查异常。虽然在你的情况下应该没问题。

相关主题:

http://cs.oswego.edu/pipermail/concurrency-interest/2012-December/010486.html

http://cs.oswego.edu/pipermail/concurrency-interest/2014-August/012911.html