What is the role of `ExecutorService` in the Executor framework?
`ExecutorService` manages a pool of threads that execute tasks sequentially and ensures that tasks are executed in a synchronous manner.
Thatâ€™s partially correct. `ExecutorService` does manage thread pools, but it allows tasks to be executed concurrently, not sequentially.
Can you explain how `ExecutorService` uses thread pools to execute tasks concurrently?