title: How do I print summary message after all threads (in a pool) complete?
body: <p>I have a command line application. It runs a loop say 100 times and in the loop schedules a task using a thread. I am using ExecutorService so there are 4 threads running at any time.</p>
  
  <p>After the loop ends, I want to print a summary message. E.g. time taken to complete all 100 tasks. When I stepped through the code the debugger went straight to the summary part, but the other tasks are still running. I understand this is because each thread runs on its own. So how do I print messages only after all threads complete?</p>
  
  <pre><code>ExecutorService exec = Executors.newFixedThreadPool(4);
  
  long startTime = System.currentTimeMillis();
  
  for (int i = 0; i &lt; 100; i++) {
  
      Runnable requestHandler = new Runnable() {
          @Override
          public void run() {
              try {
                  // call task function in here
              } catch (Exception ex) {
              }
          }
      };
      exec.execute(requestHandler);
  }
  
  exec.shutdown();
  
  long endTime = System.currentTimeMillis();
  
  LOGGER.info("******************SUMMARY******************");
  LOGGER.info("Time taken : " + ((endTime - startTime)/1000) + " seconds, " 
                              + ((endTime - startTime)/1000/60) + " minutes");
  </code></pre>