Everything will be fine. Each instance of the ExecutorCompletionService maintains its own queue of completed tasks and simply uses the underlying Executor to process each task.
Tasks can influence each other in terms of efficiency if the number of completion services is large and the thread pool has an upper limit, but this will not affect the correctness of the result.
source share