Start here. This is the direct spoken answer to practice first.
Overview
An executor is a queueing and resource-isolation policy, not merely a shorter way to start threads.
ExecutorService separates task submission from thread creation and scheduling. For CPU-bound work, useful platform-thread parallelism is near available processing capacity; for blocking work, the design must account for wait time and downstream limits. A bounded queue prevents unlimited memory growth, and a rejection policy defines what happens when both workers and queue are saturated. The component that creates the executor owns orderly shutdown.