Sizin Future
, bir ExecutorService
yönteme yapılan bir çağrının sonucuysa (örn. submit()
), En kolayı,CompletableFuture.runAsync(Runnable, Executor)
onun yerine yöntemi kullanmaktır.
Nereden
Runnbale myTask = ... ;
Future<?> future = myExecutor.submit(myTask);
-e
Runnbale myTask = ... ;
CompletableFuture<?> future = CompletableFuture.runAsync(myTask, myExecutor);
Daha CompletableFuture
sonra "yerel olarak" oluşturulur.
DÜZENLEME: @SamMefford yaparak yorumları edinerek bir geçirmek istiyorsanız, @MartinAndersson düzeltilebilir Callable
, çağrıya gerek supplyAsync()
dönüştürerek, Callable<T>
bir içine Supplier<T>
ile örneğin:
CompletableFuture.supplyAsync(() -> {
try { return myCallable.call(); }
catch (Exception ex) { throw new RuntimeException(ex); }
}, myExecutor);
Çünkü T Callable.call() throws Exception;
bir istisna atar ve T Supplier.get();
yapmaz, istisnayı yakalamanız gerekir, böylece prototipler uyumlu olur.