title: ExecutorService vs CompletableFuture
body: <p>I have been trying to implement an asynchronous process, where the parent method calls a child method which would in-turn call three different methods. 
  I want all of this process to be done asynchronously i.e. after these three calls in the child method are made in parallel the control should go back to the parent method and continue with the rest of its execution.</p>
  
  <p>I have this code which when tested works fine. </p>
  
  <pre><code>public ReturnSomething parent(){
      child();
      ...//rest to UI
  }
  
  private void child(){
    ExecutorService executorService = Executors.newFixedThreadPool(3);
  
    Runnable service1 = () -&gt; {
       MyFileService.service1();
    };
  
    Runnable service2 = () -&gt; {
        MyFileService.service2();
    };
  
    Runnable service3 = () -&gt; {
        MyFileService.service3();
    };
  
    executorService.submit(service1);
    executorService.submit(service2);
    executorService.submit(service3);
  }
  </code></pre>
  
  <p>Now, my lead is asking me to use this rather. </p>
  
  <pre><code>public ReturnSomething parent(){
      child();
      ...//rest to UI
  }
  
  private void child(){
      CompletableFuture.supplyAsync(() -&gt;  MyFileService.service1();
      CompletableFuture.supplyAsync(() -&gt;  MyFileService.service2();
      CompletableFuture.supplyAsync(() -&gt;  MyFileService.service3();
  }
  </code></pre>
  
  <p>I understand that that CompletableFuture is new from Java 8, but how is the 2nd code better than the 1st?
  Since, for ExecutorService, I am not calling the "get()" method I would not be waiting for the aysnc response. So, can some one please explain what is the difference?</p>