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