面试题答案
一键面试AbortPolicy(默认策略)
- 特点:当任务提交到线程池被拒绝时,会抛出RejectedExecutionException异常。
- 适用场景:适用于需要立即知道任务提交失败的场景,开发人员可以在捕获异常后进行相应处理。例如在一些对任务执行非常严格,不允许任务丢失的场景中使用。
CallerRunsPolicy
- 特点:当任务提交到线程池被拒绝时,该任务会被提交任务的线程直接执行。这意味着提交任务的线程将不会立即返回,而是执行这个被拒绝的任务。
- 适用场景:适用于希望降低新任务提交速度的场景。例如在一些负载敏感的系统中,让提交任务的线程执行任务,可减缓新任务提交频率,同时也不会丢弃任务。
DiscardPolicy
- 特点:当任务提交到线程池被拒绝时,直接丢弃该任务,不做任何处理。
- 适用场景:适用于可以容忍任务丢失,且任务执行与否对系统整体影响不大的场景。例如一些日志记录任务,偶尔丢失几条日志记录对系统功能无关键影响。
DiscardOldestPolicy
- 特点:当任务提交到线程池被拒绝时,会丢弃等待队列中最老的任务(即最早进入队列的任务),然后尝试再次提交当前被拒绝的任务。
- 适用场景:适用于希望优先处理新任务,且对等待队列中的任务处理顺序要求不高的场景。例如在一些实时性要求较高的系统中,新任务可能更重要,丢弃旧任务以保证新任务能尽快执行。