线程池状态定义
// 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;
几种关闭线程池的方法
- shutdown()方法
等待当前工作队列中的剩余任务全部执行完成之后,才会执行关闭。调用后、状态转为SHUTDOWN
- shutdownNow()方法
立即关闭线程池的方法,此方法会打断正在执行的工作线程
清空当前工作队列中的剩余任务,返回的是尚未执行的任务
- awaitTermination()方法
等待线程池完成关闭,在设置的时间timeout内如果线程池完成关闭,返回true, 否则返回fals
关闭线程池的一般步骤
几种状态的转换