CompletableFuture from Callable?

diesieben07 picture diesieben07 · May 31, 2015 · Viewed 9.9k times · Source

Today I experimented with the "new" CompletableFuture from Java 8 and found myself confused when I didn't find a runAsync(Callable) method. I can do it myself like shown below, but why is this (to me very obvious and useful utility method) missing? Am I missing something?

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;
}

Answer

ZhongYu picture ZhongYu · May 31, 2015

You are supposed to use supplyAsync(Supplier<U>)

In general, lambdas and checked exceptions do not work very well together, and CompletableFuture avoids checked exceptions by design. Though in your case it should be no problem.

related threads:

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

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