面试题答案
一键面试正在执行的任务
- 线程继续执行:当线程池进入
SHUTDOWN
状态后,正在执行任务的线程会继续执行完当前任务。这是因为线程池不会强制中断正在执行任务的线程,而是让它们自然结束。 - 防止新任务提交:进入
SHUTDOWN
状态后,线程池不再接受新的任务提交。execute
方法会拒绝新的任务,submit
方法仍然可以提交任务,但会立即返回一个Future
对象,其get
方法会抛出RejectedExecutionException
。
等待队列中的任务
- 处理方式:线程池中的工作线程在完成当前正在执行的任务后,会从等待队列(
workQueue
)中获取新的任务继续执行,直到等待队列为空。 - 优雅关闭:这种机制确保了等待队列中的任务也能够按照顺序被处理,从而实现了线程池的优雅关闭,不会丢失等待队列中的任务。
线程资源释放
- 线程减少:当等待队列中的任务全部执行完毕,并且所有正在执行任务的线程都执行完毕后,线程池中的工作线程数量会逐渐减少。
- 线程终止:工作线程在完成任务后,会检查线程池的状态。如果线程池处于
SHUTDOWN
状态且等待队列为空,或者线程池处于STOP
状态,工作线程会终止。 - TERMINATED状态:当所有工作线程都终止,并且等待队列也为空时,线程池会从
SHUTDOWN
状态切换到TERMINATED
状态,此时线程池的所有任务都已完成,资源已合理释放。