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