4.4 有关执行器的其他信息

本章扩展了ThreadPoolExecutor类和ScheduledThreadPoolExecutor类,并且重载了其中的一些方法。但是如果想实现更多特殊行为,还可以重载更多方法。下面是可以重载的一些方法。

  • shutdown():必须显式调用该方法以结束执行器的执行,也可以重载该方法,加入一些代码释放执行器所使用的额外资源。
  • shutdownNow()shutdown()方法和shutdownNow()方法之间的区别在于shutdown()方法要等待执行器中所有处于等待状态的任务全部终结。
  • submit()invokeall()或者invokeany():可以调用这些方法向执行器发送并发任务。如果需要在将任务插入到执行器任务队列之前或之后进行一些操作,就可以重载这些方法。请注意,在任务进行排队之前或之后添加定制操作与在该任务执行之前或之后添加定制操作是不同的,这些操作要考虑到重载beforeExecute()方法和afterExecute()方法。

在新闻阅读器例子中,我们使用scheduleWithFixedDelay()方法将任务发送给执行器。但是ScheduledThreadPoolExecutor类还有其他一些方法可用于执行周期性任务或者延迟之后的任务。

  • schedule():该方法在给定延迟之后执行某个任务,且该任务仅执行一次。
  • scheduleAtFixedRate():该方法按照给定周期执行一个周期性任务。它与scheduleWithFixedDelay()方法的区别在于,对于后者而言,两次执行之间的延迟是指第一次执行结束之后到第二次执行之前的时间;而对于前者而言,两次执行之间的延迟是指两次执行起始之间的时间。