Если ваш Future- результат вызова ExecutorServiceметода (например submit()), проще всего использовать этот CompletableFuture.runAsync(Runnable, Executor)метод.
Из
Runnbale myTask = ... ;
Future<?> future = myExecutor.submit(myTask);
к
Runnbale myTask = ... ;
CompletableFuture<?> future = CompletableFuture.runAsync(myTask, myExecutor);
CompletableFutureЗатем создается «родной».
РЕДАКТИРОВАТЬ: следуя комментариям @SamMefford, исправленным @MartinAndersson, если вы хотите передать a Callable, вам нужно позвонить supplyAsync(), преобразовав Callable<T>в a Supplier<T>, например, с помощью:
CompletableFuture.supplyAsync(() -> {
try { return myCallable.call(); }
catch (Exception ex) { throw new RuntimeException(ex); }
}, myExecutor);
Поскольку T Callable.call() throws Exception;выдает исключение и T Supplier.get();не делает этого, вы должны перехватить исключение, чтобы прототипы были совместимы.