MST
星途 面试题库

面试题:Java线程池异常预防之常见异常类型

在Java线程池中,可能会出现哪些常见的异常?请列举并简要说明每种异常产生的原因。
35.5万 热度难度
编程语言Java

知识考点

AI 面试

面试题答案

一键面试
  • RejectedExecutionException
    • 原因:当线程池已经关闭,或者线程池达到最大容量且工作队列已满,新任务提交时会抛出此异常。例如,使用ThreadPoolExecutor,当调用execute方法提交任务,而线程池状态为SHUTDOWN及以上(SHUTDOWNSTOPTERMINATED),或者当前线程数达到最大线程数且工作队列已满,就会触发该异常。
  • NullPointerException
    • 原因:在向线程池提交任务时,如果提交的任务为null,则会抛出此异常。比如在ThreadPoolExecutorexecute方法或submit方法中,若传入null任务对象,就会导致该异常。
  • IllegalArgumentException
    • 原因
      • 在线程池构造时,如果传入的参数不合法,如核心线程数小于0、最大线程数小于等于0、存活时间小于0 、工作队列容量小于等于0等情况,会抛出此异常。例如ThreadPoolExecutor构造函数中,corePoolSizemaximumPoolSizekeepAliveTimeworkQueue相关参数设置不满足要求时触发。
      • 在设置线程池参数时,如调用setCorePoolSizesetMaximumPoolSize等方法,若传入参数不满足相应规则,也会抛出该异常。