Якщо ваш Futureрезультат - результат виклику ExecutorServiceметоду (наприклад submit()), найпростішим буде використання CompletableFuture.runAsync(Runnable, Executor)методу.
Від
Runnbale myTask = ... ;
Future<?> future = myExecutor.submit(myTask);
до
Runnbale myTask = ... ;
CompletableFuture<?> future = CompletableFuture.runAsync(myTask, myExecutor);
CompletableFutureПотім створюється «рідний».
EDIT: Переслідуючи коментарі @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();ні, вам потрібно вловити виняток, щоб прототипи були сумісні.