Nếu của bạn Future
là kết quả của một lệnh gọi đến một ExecutorService
phươ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.