यदि आपकी विधि (उदाहरण के लिए ) Future
कॉल का परिणाम है , तो सबसे आसान तरीका के बजाय विधि का उपयोग करना होगा ।ExecutorService
submit()
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();
नहीं, आपको अपवाद को पकड़ना होगा ताकि प्रोटोटाइप संगत हो।