หากคุณ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 หากคุณต้องการส่งผ่าน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();ไม่ทำคุณจึงต้องจับข้อยกเว้นเพื่อให้ต้นแบบเข้ากันได้