回答
线程池的拒绝策略是任务在提交给线程池时,线程池无法接受新任务的情况下执行的处理策略。目前线程池内置了四种拒绝策略。
一、AbortPolicy
默认的拒绝策略。抛出异常,中止任务。如果任务无法提交到线程池时会抛出 RejectedExecutionException
,我们需要处理好该异常,否则会影响后续任务的执行。
二、CallerRunsPolicy
该策略不会丢弃任务,只要线程池没有关闭的话,则使用提交任务的线程来执行这个任务。它一般适用于并发量比较小,对任务执行时间要求不严格的场景。
但是,由于是调用者自身执行任务,如果任务提交速度过快,可能导致程序阻塞,性能效率上必然的损失较大。
三、DiscardPolicy
直接丢弃,不做任何处理,但是不会抛出异常。该策略适用于可以容忍任务丢失的场景。不会对提交任务的线程产生任何影响。