面试题答案
一键面试1. shutdown() 方法
- 状态变化:线程池状态从
RUNNING
变为SHUTDOWN
。 - 正在执行的任务:会继续执行直到完成。
- 等待队列中的任务:不再接受新任务,但队列中已有的任务不会被处理,会保持在队列中。
2. shutdownNow() 方法
- 状态变化:线程池状态从
RUNNING
变为STOP
。 - 正在执行的任务:调用
Thread.interrupt()
尝试中断正在执行的任务。 - 等待队列中的任务:会被清空,这些任务会以
List<Runnable>
的形式返回,并且这些任务对应的线程也会被尝试中断。
3. 通过 Future 接口管理任务的中断和结果获取
- 中断任务:若使用
submit
方法提交任务会返回Future
对象,调用Future.cancel(true)
可以中断任务,若任务正在执行,会尝试调用Thread.interrupt()
进行中断。 - 获取结果:调用
Future.get()
方法获取任务执行结果,如果任务还未完成,此方法会阻塞直到任务完成;若任务被中断,get
方法会抛出InterruptedException
,若任务执行异常,会抛出ExecutionException
。