线程池的执行流程

什么是线程池?

        线程池内部维护了若干个线程,没有任务的时候,这些线程都处于等待空闲状态。如果有新的线程任务,就分配一个空闲线程执行。如果所有线程都处于忙碌状态,线程池会创建一个新线程进行处理或者放入队列(工作队列)中等待。

线程池的优点主要包括以下几点:

1. 提高系统性能:线程池可以提高应用程序的性能,因为线程的创建和销毁代价比较高,使用线程池可以避免频繁地创建和销毁线程,从而提高系统性能。

2. 更好的资源利用:线程池可以更好地利用系统资源,避免了因过多线程导致系统资源耗尽的情况。

3. 任务队列:线程池通常具有任务队列,任务可以预先提交到任务队列中,线程池按照一定的策略顺序执行任务,从而避免了系统资源的抢占和饥饿现象。

4. 线程可复用:线程池中的线程可以被复用,可以避免因频繁创建和销毁线程而导致的系统性能下降和资源浪费。

5. 控制并发度:线程池可以对并发度进行控制,可以限制同时执行的任务数量,从而避免系统资源的过度占用和负载过高。

6. 提高响应速度:线程池中的线程可以更快地响应来自请求的任务,提高系统的响应速度。

线程池的执行流程

1. 提交一个新线程任务,线程池会在线程池中分配一个空闲线程,用于执行线程任务;
2. 如果线程池中不存在空闲线程,则线程池会判断当前“存活的线程数”是否小于核心线程数corePoolSize。
        如果小于核心线程数corePoolSize,线程池会创建一个新线程(核心线程)去处理新线程任务;
        如果大于核心线程数corePoolSize,线程池会检查工作队列;
        如果工作队列未满,则将该线程任务放入工作队列进行等待。线程池中如果出现空闲线程,将从工作队列中按照FIFO的规则取出1个线程任务并分配执行;
        如果工作队列已满,则判断线程数是否达到最大线程数maximumPoolSize;
        如果当前“存活线程数”没有达到最大线程数maximumPoolSize,则创建一个新线程(非核心线程)执行新线程任务;
        如果当前“存活线程数”已经达到最大线程数maximumPoolSize,直接采用拒绝策略处理新线程任务;
      综上所述,执行顺序为:核心线程、工作队列、非核心线程、拒绝策略。

image.png

线程池的状态 

线程池的状态分为:

RUNNING

运行状态,线程池被一旦被创建,就处于RUNNING状态,并且线程池中的任务数为0。该状态的线程池会接收新任务,并处理工作队列中的任务。
调用线程池的shutdown()方法,可以切换到SHUTDOWN关闭状态;
调用线程池的shutdownNow()方法,可以切换到STOP停止状态;

SHUTDOWN

关闭状态,该状态的线程池不会接收新任务,但会处理工作队列中的任务;
■当工作队列为空时,并且线程池中执行的任务也为空时,线程池进入TIDYING状态;

STOP

停止状态,该状态的线程不会接收新任务,也不会处理阻塞队列中的任务,而且会中断正在运行 的任务;
线程池中执行的任务为空,进入TIDYING状态;

TIDYING

整理状态,该状态表明所有的任务已经运行终止,记录的任务数量为0;
terminated()执行完毕,进入TERMINATED状态;

TERMINATED

 终止状态,该状态表示线程池彻底关闭。

线程池状态.webp

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

猿究◎小飞

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值