Jika Anda Future
adalah hasil dari panggilan ke suatu ExecutorService
metode (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 CompletableFuture
kemudian 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.