title: How to wait for all threads to finish, using ExecutorService?
body: <p>I need to execute some amount of tasks 4 at a time, something like this:</p>
  
  <pre><code>ExecutorService taskExecutor = Executors.newFixedThreadPool(4);
  while(...) {
      taskExecutor.execute(new MyTask());
  }
  //...wait for completion somehow
  </code></pre>
  
  <p>How can I get notified once all of them are complete? For now I can't think about anything better than setting some global task counter and decrease it at the end of every task, then monitor in infinite loop this counter to become 0; or get a list of Futures and in infinite loop monitor isDone for all of them. What are better solutions not involving infinite loops?</p>
  
  <p>Thanks.</p>