最近在使用ExecutorService的时候,对其关闭操作的概念非常模糊。查阅了许多文章、问答之后,有了一个总结。
shutdown
:
- 调用之后不允许继续往线程池内继续添加线程;
- 线程池的状态变为
SHUTDOWN
状态; - 所有在调用
shutdown()
方法之前提交到ExecutorSrvice
的任务都会执行; - 一旦所有线程结束执行当前任务,
ExecutorService
才会真正关闭。
shutdownNow()
:
- 该方法返回尚未执行的task的List;
- 线程池的状态变为
STOP
状态; - 阻止所有正在等待启动的任务,并且停止当前正在执行的任务;