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
本文详细解析了线程池的两种关闭方式:shutdown与shutdownNow的区别。shutdown优雅地停止接收新任务并允许已完成的任务执行完毕;而shutdownNow则立即停止所有任务,尝试中断正在执行的任务,并返回未执行的任务列表。同时介绍了awaitTermination方法如何阻塞当前线程直到所有已提交的任务完成或超时。
4986

被折叠的 条评论
为什么被折叠?



