When should I use a CompletionService over an ExecutorService?
Omitting many details: ExecutorService = incoming queue + worker threads CompletionService = incoming queue + worker threads + output queue
Omitting many details: ExecutorService = incoming queue + worker threads CompletionService = incoming queue + worker threads + output queue