一、任务处理:
当在线程池中执行任务时,如何记录任务的开始结束时间?如何记录异常日志?如何对任务进行一些自定义处理?
针对上面的问题,我们可以采用直接在任务中编码的形式,也可以利用ThreadPoolExecutor的模版方法进行实现,其实在使用线程池时,都需要重新构造线程池类,配置对应的参数,这样才能使它发挥应有的效果。
如下图(1146行,1157行),线程池有任务前置后置方法,关于任务的一些处理可以通过这两个方法进行实现,首先就需要继承ThreadPoolExecutor,重写beforeExecute和afterExecute,当任务出现异常时,可以在后置方法中打印出具体的日志和任务信息,也可以针对这些信息做一些特殊处理等。
二、异常恢复:
当线程池中的任务发生异常时,当前执行的线程会发生什么?
如上图,异常发生时,大体上的逻辑是completedAbruptly依然会是true,然后执行下图代码,先减少一个线程数,然后在1025行再添加一个新线程。