Why use an ExecutorService instead of creating a Thread for every task?
Strong answer
An executor separates task submission from thread lifecycle, enables bounded resource usage, reuses workers, and provides shutdown and rejection policies. Direct thread creation makes those operational decisions easy to miss.
