饱和策略
1.“终止”策略,默认策略:
该策略将抛出 RejectedExecutionException。
当无法放入队列中时,抛弃该任务。
2.“调用者运行”策略:
当任务队列满时。
将下一个提交上来的任务,
交给调用ExecutorService来执行任务的主线程来执行,而不再通过ExecutorService线程池来执行这个任务
由于执行任务需要一定的时间,
因此这段时间主线程将不能再往ExecutorService中加入新的任务,从而达到缓解线程池压力的目的。
线程工厂
每当创建一个线程时,都是通过线程工厂方法来完成的。默认的线程工厂将创建一个新的,非守护线程。
在许多情况下我们需要使用定制的线程工厂方法。
这样可以定制线程池的配置信息。比如为线程指定名字从俄日可以在线程转储和错误日志信息中区分来自不同线程池的线程。
扩展ThreadPoolExecutor
可以通过在子类中改写:beforeExecute、afterExecutor、和terminated,这些方法来扩展和改写ThreadPoolExecutor的行为。
tips:
如果需要提交一个任务集并等待它们完成,那么可以使用ExecutorService.invokeAll方法,并且在所有任务都执行完成后调用CompletionService来获取结果。