यदि आपकी विधि (उदाहरण के लिए ) Futureकॉल का परिणाम है , तो सबसे आसान तरीका के बजाय विधि का उपयोग करना होगा ।ExecutorServicesubmit()CompletableFuture.runAsync(Runnable, Executor)
से
Runnbale myTask = ... ;
Future<?> future = myExecutor.submit(myTask);
सेवा
Runnbale myTask = ... ;
CompletableFuture<?> future = CompletableFuture.runAsync(myTask, myExecutor);
CompletableFutureफिर "मूल रूप से" बनाया जाता है।
संपादित करें: @MartinAndersson द्वारा सुधारे गए @SamMefford द्वारा सही टिप्पणियां, यदि आप एक पास करना चाहते हैं, तो आपको Callableकॉल करने की आवश्यकता है , जैसे supplyAsync()कि Callable<T>एक में परिवर्तित करना Supplier<T>, जैसे:
CompletableFuture.supplyAsync(() -> {
try { return myCallable.call(); }
catch (Exception ex) { throw new RuntimeException(ex); }
}, myExecutor);
क्योंकि T Callable.call() throws Exception;अपवाद फेंकता है और T Supplier.get();नहीं, आपको अपवाद को पकड़ना होगा ताकि प्रोटोटाइप संगत हो।