shutdown
停止接收新任务,原来的任务继续执行。
(1)停止接收新的任务
(2)已经提交的任务,会继续执行完成
(3)等到第2步完成后,才真正停止。
shutdownNow
停止接收新任务,原来的任务停止执行。
(1)停止接收新的任务。
(2)忽略队列中等待的伤
(3)尝试将正在执行的任务interrupt中断
(4)返回未执行的任务列表
说明:它试图终止线程的方法是通过调用 Thread.interrupt() 方法来实现的,这种方法的作用有限,如果线程中没有sleep 、wait、Condition、定时锁等应用, interrupt() 方法是无法中断当前的线程的。所以,shutdownNow() 并不代表线程池就一定立即就能退出,它也可能必须要等待所有正在执行的任务都执行完成了才能退出。但是大多数时候是能立即退出的。
awaitTermination(long timeOut,TimeUnit unit)
当前线程阻塞
(1)等所有已提交的任务执行完
(2)或者等超时时间到了
(3)或者线程被中断,抛出InterruptedException