线程池生命周期包括:
- RUNNING:接收新的任务并处理队列中的任务
- SHUTDOWN:不接收新的任务,但是处理队列中的任务
- STOP:不接收新的任务,不处理队列中的任务,同时中断处理中的任务
- TIDYING:所有的任务处理完成,有效的线程数是 0
- TERMINATED:terminated () 方法执行完毕。
生命周期状态和方法对应的关系:
1、shutDown()
当线程池调用该方法时,线程池的状态则立刻变成 SHUTDOWN 状态。此时,则不能再往线程池中添加任何任务,否则将会抛出 RejectedExecutionException 异常。但是,此时线程池不会立刻退出,直到添加到线程池中的任务都已经处理完成,才会退出。
2、shutdownNow()
执行该方法,线程池的状态立刻变成 STOP 状态,并试图停止所有正在执行的线程,不再处理还在池队列中等待的任务,当然,它会返回那些未执行的任务。 <br /> 它试图终止线程的方法是通过调用 Thread.interrupt () 方法来实现的,但是大家知道,这种方法的作用有限,如果线程中没有 sleep 、wait、Condition、定时锁等应用,interrupt () 方法是无法中断当前的线程的。所以,ShutdownNow () 并不代表线程池就一定立即就能退出,它可能必须要等待所有正在执行的任务都执行完成了才能退出。
作者:悟空聊架构
链接:https://juejin.cn/post/6996188891401338887
来源:稀土掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。