Jika Anda Futureadalah hasil dari panggilan ke suatu ExecutorServicemetode (misalnya submit()), cara termudah adalah menggunakan CompletableFuture.runAsync(Runnable, Executor)metode tersebut.
Dari
Runnbale myTask = ... ;
Future<?> future = myExecutor.submit(myTask);
untuk
Runnbale myTask = ... ;
CompletableFuture<?> future = CompletableFuture.runAsync(myTask, myExecutor);
The CompletableFuturekemudian dibuat "native".
EDIT: Mengejar komentar oleh @SamMefford yang dikoreksi oleh @MartinAndersson, jika Anda ingin meneruskan Callable, Anda perlu memanggil supplyAsync(), mengubahnya Callable<T>menjadi Supplier<T>, misalnya dengan:
CompletableFuture.supplyAsync(() -> {
try { return myCallable.call(); }
catch (Exception ex) { throw new RuntimeException(ex); }
}, myExecutor);
Karena T Callable.call() throws Exception;mengeluarkan pengecualian dan T Supplier.get();tidak, Anda harus menangkap pengecualian tersebut agar prototipe kompatibel.