Если ваш 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();
не делает этого, вы должны перехватить исключение, чтобы прототипы были совместимы.