Java Multithreading, Concurrency, and Parallelism — Part 21.2
The Thread Pools

In the previous part, we have seen why we need to go for the Executor
framework. From here on, we will see how we can use the Executor
framework to organize the tasks.
We know that a task is a self-contained logical unit of work run by the threads. And threads are a mechanism by which tasks can run asynchronously…