up:: 线程池相关的类和方法

说明:

(1) 简介线程池的5种状态;

(2)线程池与线程的几种状态】这篇博客不错,如有需要可以参考;

一:线程池的状态;

已知线程有6种状态,这在【Java多线程】中有介绍;

线程池也有不同5种状态;

(1)RUNNING;

● 线程池处于RUNNING状态时,线程池能够接收新任务,也能够对已经添加的任务进行处理;

● 线程池一被创建,线程池的状态就是RUNNING状态;

(2)SHUTDOWN;

● 线程池已经被关闭了,不再接收新任务;但是,其还是会处理队列中的剩余的任务;

● 调用线程池的shutdown()方法后,线程池的状态就会由RUNNING转为SHUTDOWN;

(3)STOP;

● 线程池处于STOP状态,此时线程池不再接收新任务,不处理已经添加进来的任务,并且会中断正在处理的任务;

● 调用线程池的shutdownNow()方法后,线程池的状态就会由RUNNING或SHUTDOWN转为STOP;

(4)TIDYING;

● 线程池被下达关闭命令后,如果当前所有的任务都已经终止了(这个终止可以表示执行结束,也可以表示强制中断,也可以表示被丢弃) ,那么线程就会进入TIDYING状态;当线程池变为TIDYING状态时,会执行钩子函数terminated()。terminated()在ThreadPoolExecutor类中是空的,若用户想在线程池变为TIDYING时,进行相应的处理;可以通过重载terminated()函数来实现。

● 如果线程状态已经是SHUTDOWN了,并且线程中以及队列中都没有任务时,线程池就会由SHUTDOWN转为TIDYING;如果线程池状态为STOP,那么当线程池把所有的任务都给清理干净时,线程池就会由STOP转为TIDYING;

(5)TERMINATED;

● 线程池就结束了;线程池就不能重新启动了;

● 如果线程池处于TIDYING状态,那么当线程池执行完terminated()方法后,线程池状态就会由TIDYING转为TERMINTED;