Nếu của bạn Futurelà kết quả của một lệnh gọi đến một ExecutorServicephương thức (ví dụ submit()), thì cách dễ nhất là sử dụng CompletableFuture.runAsync(Runnable, Executor)phương thức thay thế.
Từ
Runnbale myTask = ... ;
Future<?> future = myExecutor.submit(myTask);
đến
Runnbale myTask = ... ;
CompletableFuture<?> future = CompletableFuture.runAsync(myTask, myExecutor);
Sau CompletableFutuređó được tạo "nguyên bản".
CHỈNH SỬA: Theo đuổi nhận xét của @SamMefford được sửa bởi @MartinAndersson, nếu bạn muốn chuyển a Callable, bạn cần gọi supplyAsync(), chuyển đổi Callable<T>thành a Supplier<T>, ví dụ: với:
CompletableFuture.supplyAsync(() -> {
try { return myCallable.call(); }
catch (Exception ex) { throw new RuntimeException(ex); } // Or return default value
}, myExecutor);
Bởi vì T Callable.call() throws Exception;ném một ngoại lệ và T Supplier.get();không, bạn phải nắm bắt ngoại lệ để các nguyên mẫu tương thích.