The executor service creates and maintains a reusable pool of threads for executing submitted tasks . The service also manages a queue, which is used when there are more tasks than the number of threads in the pool and there is a need to queue up tasks until there is a free thread available to execute the task.