import java.util.ArrayList; import java.util.List; import java.util.concurrent.CompletableFuture; import java.util.concurrent.ExecutionException; import java.util.stream.Collectors; public class ParallelProcessing { public static void main(String argss[]) throws InterruptedException { List> futuresList = new ArrayList>(); CompletableFuture addAsy = CompletableFuture.supplyAsync(()->(addFun1(10,5))); CompletableFuture subAsy = CompletableFuture.supplyAsync(()->(subFun1(10,5))); CompletableFuture mulAsy = CompletableFuture.supplyAsync(()->(mulFun1(10,5))); futuresList.add(addAsy); futuresList.add(subAsy); futuresList.add(mulAsy); CompletableFuture allFutures = CompletableFuture .allOf(futuresList.toArray(new CompletableFuture[futuresList.size()])); CompletableFuture> allCompletableFuture = allFutures.thenApply(future -> { return futuresList.stream().map(completableFuture -> completableFuture.join()) .collect(Collectors.toList()); }); CompletableFuture> completableFuture = allCompletableFuture.toCompletableFuture(); try { List finalList = (List) completableFuture.get(); System.out.print(finalList); } catch (InterruptedException e) { e.printStackTrace(); } catch (ExecutionException e) { e.printStackTrace(); } } public static Integer addFun1(int a, int b) { System.out.println(Thread.currentThread().getName()); for (int i=0;i<10;i++){ System.out.print(Thread.currentThread().getName()+i); } return a+b ; } public static Integer subFun1(int a, int b) { System.out.println(Thread.currentThread().getName()); for (int i=0;i<10;i++){ System.out.print(Thread.currentThread().getName()+i); } return a-b ; } public static Integer mulFun1(int a, int b) { System.out.println(Thread.currentThread().getName()); for (int i=0;i<10;i++){ System.out.print(Thread.currentThread().getName()+i); } return a*b ; } }