Якщо ваш 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();
ні, вам потрібно вловити виняток, щоб прототипи були сумісні.