CompletableFuture - Neethahiremath/Wiki GitHub Wiki

refer https://www.callicoder.com/java-8-completablefuture-tutorial/

ex for runAsync

    ExecutorService executorService =  Executors.newWorkStealingPool(130);

      Set<String> values = Stream.of("12","13","14").collect(Collectors.toSet());
      Set<String> eachVal = Stream.of("1","2","3").collect(Collectors.toSet());
      List<java.util.concurrent.CompletableFuture<Void>> taskList = new ArrayList<>();
      values.forEach(
              val -> {
                  java.util.concurrent.CompletableFuture<Void> submittedTask =
                          java.util.concurrent.CompletableFuture.runAsync(
                                  () -> {
                                      eachVal.forEach(in->{
                                          System.out.print(in +" "+ val);
                                      });

                                  },
                                  executorService)
                                  .exceptionally(
                                          (ex) -> {
                                              log.error(
                                                      "Error while processing the processEventFromFlag for node {}",
                                                      val,
                                                      ex);
                                              return null;
                                          });
                  taskList.add(submittedTask);
              });
 
      java.util.concurrent.CompletableFuture.allOf(taskList.toArray(new java.util.concurrent.CompletableFuture[taskList.size()])).join();

bean of executorService can also be created

 @Bean
    public ExecutorService executorService() {
        executorService = Executors.newWorkStealingPool(130);
        return executorService;
    }

ex for supplyAsync

 Set<String> values = Stream.of("12", "13", "14").collect(Collectors.toSet());
    Set<String> eachVal = Stream.of("1", "2", "3").collect(Collectors.toSet());
    List<java.util.concurrent.CompletableFuture<Object>> taskList = new ArrayList<>();
    values.forEach(
        val -> {
          java.util.concurrent.CompletableFuture<Object> submittedTask =
              java.util.concurrent.CompletableFuture.supplyAsync(
                      () -> {
                        eachVal.forEach(
                            in -> {
                              System.out.print(in + " " + val);
                            });
                        return Boolean.TRUE;
                      },
                      executorService)
                  .handle(
                      (res, ex) -> {
                        if (ex != null) {
                          log.error("");
                          ex.printStackTrace();
                          return "Unknown!";
                        }
                        return res;
                      });
          taskList.add(submittedTask);
        });
    // Awaiting future completion
    java.util.concurrent.CompletableFuture.allOf(
            taskList.toArray(new java.util.concurrent.CompletableFuture[taskList.size()]))
        .join();

supplyAsync returns a value and runAsync does not

⚠️ **GitHub.com Fallback** ⚠️