MST

星途 面试题库

面试题:Java中ThreadPoolExecutor常见拒绝策略有哪些及应用场景

请列举Java中ThreadPoolExecutor的常见拒绝策略,并简要说明每种拒绝策略适合在哪些应用场景下使用。
11.9万 热度难度
编程语言Java

知识考点

AI 面试

面试题答案

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