如何优雅的关闭线程池——Shutdown()和ShutdownNow()的区别及原理
2021-10-28 17:11:44 1 举报
Shutdown()和ShutdownNow()的区别及原理
作者其他创作
大纲/内容
是
加锁
阻塞,直到线程池所有任务结束
线程池状态置为STOP
调用shutdown()线程池状态:SHUTDOWN
从线程池的生命周期可以看出,即使调用了线程池的shutdown()或者是shutdownNow()方法,线程池也只是进入了TIDYING状态,而不是真正的关闭,那么如何正确的优雅的关闭线程池呢?
关键2:tryTerminate()方法原理
检查是否有关闭权限
调用awaitTermination()判断是否达到TERMINTAION状态
开始线程池状态:RUNNING
1、shutdown()不会清空队列里的任务,会等任务执行完,shutdownNow()会直接清空队列里的任务2、shutdown()只会中断空闲线程,shutdownNow()会中断所有线程
开始
线程池关闭
解锁
结束
shutdownNow()遍历所有worker线程,无差别全部中断线程
tryTerminate()
中断空闲线程interruptIdleWorkers()
调用shutdownNow()线程池状态:STOP
队列和线程池为空
否
线程池状态置为SHUTDOWN
关键1:shutdown()怎么实现中断空闲线程
清空队列interruptWorkers()
shutdown()和shutdownNow()区别
0 条评论
下一页