面试题答案
一键面试- AbortPolicy(默认拒绝策略):
- 策略描述:直接抛出
RejectedExecutionException
异常。 - 适用场景:适用于对任务执行失败非常敏感的场景,例如一些关键业务流程,当任务无法执行时需要马上知晓并进行处理,不允许默默丢弃任务。
- 策略描述:直接抛出
- CallerRunsPolicy:
- 策略描述:将被拒绝的任务交由调用者线程来执行。
- 适用场景:适用于希望降低新任务提交速度的场景,通过让调用者线程执行任务,会阻塞调用者后续任务的提交,从而起到调节任务提交频率的作用。例如在一些并发度不是特别高,但对任务执行顺序有一定要求的场景。
- DiscardPolicy:
- 策略描述:默默丢弃被拒绝的任务,不做任何处理。
- 适用场景:适用于对任务执行结果不敏感,且任务量较大,允许部分任务丢失的场景,例如一些日志记录任务,如果因为线程池满而丢弃部分日志记录任务,对整体业务影响不大。
- DiscardOldestPolicy:
- 策略描述:丢弃队列中等待最久的任务,然后尝试将新任务加入队列。
- 适用场景:适用于更倾向于处理最新提交的任务的场景,例如在实时数据处理场景中,新数据的处理优先级可能高于旧数据,当线程池饱和时,丢弃旧数据任务,优先处理新任务。