线程池生命周期包括:

    • RUNNING:接收新的任务并处理队列中的任务
    • SHUTDOWN:不接收新的任务,但是处理队列中的任务
    • STOP:不接收新的任务,不处理队列中的任务,同时中断处理中的任务
    • TIDYING:所有的任务处理完成,有效的线程数是 0
    • TERMINATED:terminated () 方法执行完毕。

    生命周期状态和方法对应的关系:
    线程池的生命周期 - 图1

    1、shutDown()

    1. 当线程池调用该方法时,线程池的状态则立刻变成 SHUTDOWN 状态。此时,则不能再往线程池中添加任何任务,否则将会抛出 RejectedExecutionException 异常。但是,此时线程池不会立刻退出,直到添加到线程池中的任务都已经处理完成,才会退出。

    2、shutdownNow()

    1. 执行该方法,线程池的状态立刻变成 STOP 状态,并试图停止所有正在执行的线程,不再处理还在池队列中等待的任务,当然,它会返回那些未执行的任务。 <br /> 它试图终止线程的方法是通过调用 Thread.interrupt () 方法来实现的,但是大家知道,这种方法的作用有限,如果线程中没有 sleep waitCondition、定时锁等应用,interrupt () 方法是无法中断当前的线程的。所以,ShutdownNow () 并不代表线程池就一定立即就能退出,它可能必须要等待所有正在执行的任务都执行完成了才能退出。

    作者:悟空聊架构
    链接:https://juejin.cn/post/6996188891401338887
    来源:稀土掘金
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。