Calling shutdown() on ExecutorService prevents new tasks from being accepted while allowing currently executing tasks to finish. This is useful when you wish to gracefully stop processing after all submitted tasks are complete, such as at the end of a flash sale.
Additional Notes
Why can ExecutorService shutdown become a real problem?