1.线程池
线程池内部维护了若干个线程,没有任务时,线程处于空b闲状态,如果有任务时就会分配一个空闲的线程给该任务,如果没有空闲线程,则该任务就会被放入工作队列,直到有线程处于空闲状态就分配该线程给它。
2.线程池的优点
(1)降低资源消耗,复用已创建的线程来降低创建和销毁线程的消耗。
(2)提高响应速度,任务到达时,可以不需要等待线程的创建立即执行。
(3)提高线程的可管理性,使用线程池能够统一的分配、调优和监控。
3.线程池的执行流程
首先提交一个线程任务,线程池判断是否有空闲线程,如果有,分配空闲线程执行该线程任务;如果没有判断核心线程是否超出;如果没有,创建一个新的核心线程执行任务,如果超出,判断工作队列是否已满,没满则将该任务放于工作队列等待有空闲线程时执行,如果满了,则判断线程数是否超出最大线程数,如果没有,创建非核心线程执行任务(该线程在执行完任务会被回收),如果超出,则执行拒绝策略。
4.线程池的状态
线程池有五种状态:
(1)RUNNING:运行状态。线程池一旦被创建就会处于运行状态,此时线程池中的任务数为0.
调用shutdown()方法切换到关闭状态。
调用sshutdownNow()方法切换到停止状态。
(2)SHUTDOWN:关闭状态。线程池不会接收新任务,但会处理完工作队列中的剩余任务。
(3)STOP:停止状态。线程池不会接收新任务,也不会处理阻塞队列中的任务,当前执行的任务也会中断。
(4)TIDYING:整理状态。所有任务已运行终止,任务量为0
(5)TERMINATED:终止状态。线程池彻底关闭。