目录
什么是线程池
线程池的优点
线程池的执行流程
线程池的状态
什么是线程池
线程池是一种多线程处理形式,内部维护了若干个线程。
没有线程任务的时候,线程都处于空闲状态。如果有新的线程任务,就分配给空闲线程执行。如果所有线程都处于忙碌状态,线程池会创建新线程或者将线程任务放入工作队列中。
线程池的优点
1.避免了线程的重复创建,销毁,开销小。
2.不用等线程创建,可以直接执行线程任务,速度快。
线程池的执行流程
当提交线程任务后,线程池会判断是否存在空闲线程,如果存在空闲线程,会分配出空闲线程去执行线程任务。
如果没有空闲线程,会判断核心线程数是否达到最大,如果没有就会创建核心线程并执行线程任务。
如果线程数超过核心线程数,会判断工作队列是否已满,如果工作队列未满,将线程任务添加到工作队列。
如果工作队列已满,会判断非核心线程数是否超出,如果未超出,创建非核心线程执行线程任务。
如果非核心线程数也超出,那线程池将会拒绝执行。
拒绝策略有四种:
1.ThreadPoolExecutor.AbortPolicy:默认策略,丢弃任务并且抛出RejectedExecutionException异常。
2.ThreadPoolExecutor.DiscardPolicy:丢弃任务,但是不会抛出异常。
3.ThreadPoolExecutor.DiscardOldestPolicy:丢弃工作队列中队头任务。
4.ThreadPoolExecutor.CallerRunsPolicy:由原调用线程处理该任务。
线程池的状态
线程池有五种状态:
Running(运行状态):当线程池创建后,线程池就处于运行状态。
SHUTDOWN(关闭状态):在该状态下,线程池不再接收新的线程任务,但是会处理正在执行的线程任务与在工作队列的线程任务。
STOP(停止状态):线程池不再接收新的线程任务,而且不会处理工作队列中的线程任务,正在执行的任务也会被中断。
TIDYING(整理状态):此状态表明线程池中的所有线程任务都已运行终止。
TERMINATED(终止状态):线程池关闭。