今天,我尝试了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;
}

最佳答案

您应该使用supplyAsync(Supplier<U>)
通常,lambda和受检查的异常不能很好地协同工作,并且CompletableFuture通过设计避免了受检查的异常。虽然在您的情况下应该没问题。

相关主题:

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

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

关于java - 来自Callable的CompletableFuture?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30559707/

10-13 02:10