Introduction
Usually, when you develop a simple, concurrent programming application in Java, first you create some Runnable
objects and then the corresponding Thread
objects to execute them. If you have to develop a program that runs a lot of concurrent tasks, this approach will present the following disadvantages:
- You will have to implement all of the code-related information to manage
Thread
objects (creating, ending, and obtaining results). - You will have to create a
Thread
object per task. Executing a huge number of tasks can affect the throughput of the application. - You will have to control and manage the resources of the computer efficiently. If you create too many threads, you could saturate the system.
Since Java 5, the Java concurrency API provides a mechanism that aims to resolve these problems. This mechanism is called the Executor framework and is around the Executor
interface, its subinterface ExecutorService
, and the ThreadPoolExecutor
class that implements both these interfaces...