Additional information about executors
In this chapter, we have extended ThreadPoolExecutor and the ScheduledThreadPoolExecutor class, and overridden some of their methods. But you can override more methods if you want a more specific behavior. These are some methods you can override:
shutdown(): You must explicitly call this method to end the execution of the executor. You can override it to add some code to free additional resources used by your own executor.shutdownNow(): The difference betweenshutdown()andshutdownNow()is that theshutdown()method waits for the finalization of all the tasks that are waiting in the executor.submit(),invokeall(), orinvokeany(): You call these methods to send concurrent tasks to the executor. You can override them if you need to do some actions before or after a task is inserted in the task queue of the executor. Note that adding a custom action before or after the task is enqueued is different from adding a custom action before or after it's executed...