MST

星途 面试题库

面试题:Java线程池中饱和策略有哪些

请简述Java线程池中常见的饱和策略,并说明它们各自的特点和适用场景。
17.7万 热度难度
编程语言Java

知识考点

AI 面试

面试题答案

一键面试

AbortPolicy(默认策略)

  • 特点:当任务提交到线程池被拒绝时,会抛出RejectedExecutionException异常。
  • 适用场景:适用于需要立即知道任务提交失败的场景,开发人员可以在捕获异常后进行相应处理。例如在一些对任务执行非常严格,不允许任务丢失的场景中使用。

CallerRunsPolicy

  • 特点:当任务提交到线程池被拒绝时,该任务会被提交任务的线程直接执行。这意味着提交任务的线程将不会立即返回,而是执行这个被拒绝的任务。
  • 适用场景:适用于希望降低新任务提交速度的场景。例如在一些负载敏感的系统中,让提交任务的线程执行任务,可减缓新任务提交频率,同时也不会丢弃任务。

DiscardPolicy

  • 特点:当任务提交到线程池被拒绝时,直接丢弃该任务,不做任何处理。
  • 适用场景:适用于可以容忍任务丢失,且任务执行与否对系统整体影响不大的场景。例如一些日志记录任务,偶尔丢失几条日志记录对系统功能无关键影响。

DiscardOldestPolicy

  • 特点:当任务提交到线程池被拒绝时,会丢弃等待队列中最老的任务(即最早进入队列的任务),然后尝试再次提交当前被拒绝的任务。
  • 适用场景:适用于希望优先处理新任务,且对等待队列中的任务处理顺序要求不高的场景。例如在一些实时性要求较高的系统中,新任务可能更重要,丢弃旧任务以保证新任务能尽快执行。