title: ExecutorCompletionService? Why do need one if we have invokeAll?
body: <p>If we use an <a href="http://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ExecutorCompletionService.html">ExecutorCompletionService</a> we can submit a series of tasks as <code>Callable</code>s and get the result interacting with the <code>CompletionService</code> as a <code>queue</code>.  </p>
  
  <p>But there is also the <code>invokeAll</code> of <code>ExecutorService</code> that accepts a <code>Collection</code> of tasks and we get a list of <code>Future</code> to retrieve the results.  </p>
  
  <p>As far as I can tell, there is no benefit in using one or over the other (except that we avoid a <code>for</code> loop using an <code>invokeAll</code> that we would have to <code>submit</code> the tasks to the <code>CompletionService</code>) and essentially they are the same idea with a slight difference.  </p>
  
  <p>So why are there 2 different ways to submit a series of tasks? Am I correct that performance wise they are equivalent? Is there a case that one is more suitable than the other? I can't think of one.</p>