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...