The first step toward working with the Executor framework is to create an object of the ThreadPoolExecutor class. You can use the four constructors provided by this class or use a factory class named Executors, which creates ThreadPoolExecutor. Once you have an executor, you can send Runnable or Callable objects to be executed.
When you want to finish the execution of an executor, use the shutdown() method. The executor waits for the completion of tasks that are either running or waiting for their execution. Then, it finishes the execution.
If you send a task to an executor between the shutdown() method and the end of its execution, the task will be rejected. This is because the executor no longer accepts new tasks. The ThreadPoolExecutor class provides a mechanism, which is called when a task is rejected.
In this recipe, you will learn how to use the...