当线程池的任务缓存队列已满并且线程池中的线程数目达到maximumPoolSize时,如果还有任务到来就会采取任务拒绝策略。
通常有以下四种策略:
AbortPolicy (默认):当任务添加到线程池中被拒绝时,它会直接抛出异常。
CallerRunsPolicy :当任务添加到线程池中被拒绝时,那么主线程会自己去执行该任务。该策略既不会抛弃任务,也不会抛出异常,而是将某些任务退回,从而降低新任务的流量。
DiscardOldestPolicy :当任务添加到线程池中被拒绝时,线程池会放弃等待队列中最旧的未处理任务,然后将被拒绝的任务添加到等待队列中。
DiscardPolicy :当任务添加到线程池中被拒绝时,线程池将丢弃被拒绝的任务。
这几种拒绝策略是独立的,至于要用哪种,还是要看在实际工作中的需要。