线程池学习(六)线程池状态转化

线程池状态定义

// runState is stored in the high-order bits
// 线程池创建之后的初始状态,这种状态下可以执行任务
    private static final int RUNNING    = -1 << COUNT_BITS;
// 线程池不再接收新的任务,但是会将队列中的任务执行完 
    private static final int SHUTDOWN   =  0 << COUNT_BITS;
// 线程池不再接收新的任务,也不会处理队列中的任务,并且会将执行中的任务中断 
    private static final int STOP       =  1 << COUNT_BITS;
// 这种状态表明所有任务都处理完成或者终止,准备执行terminated()钩子方法     
    private static final int TIDYING    =  2 << COUNT_BITS;
// 执行完terminated()钩子方法之后的状态   
    private static final int TERMINATED =  3 << COUNT_BITS;

几种关闭线程池的方法

  1. shutdown()方法

等待当前工作队列中的剩余任务全部执行完成之后,才会执行关闭。调用后、状态转为SHUTDOWN

  1. shutdownNow()方法

立即关闭线程池的方法,此方法会打断正在执行的工作线程
清空当前工作队列中的剩余任务,返回的是尚未执行的任务

  1. awaitTermination()方法

等待线程池完成关闭,在设置的时间timeout内如果线程池完成关闭,返回true, 否则返回fals

关闭线程池的一般步骤
线程池学习(六)线程池状态转化_第1张图片
几种状态的转换

线程池学习(六)线程池状态转化_第2张图片

你可能感兴趣的:(#,线程,线程池,java,多线程)