Diferencia entre Executor y ExecutorCompletionservice en java

Como el título de la pregunta en sí dice ¿cuál es la diferencia entre Executors y ExecutorCompletionService en Java?

Soy nuevo en Threading, por lo que si alguien puede explicarlo con un fragmento de código, eso ayudaría mucho.