线程池的执行流程

什么是线程池

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

线程池的优点

(1)降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。

(2)提高响应速度。当任务到达时,任务可以不需要等到线程创建就能立即执行。

(3)提高线程的可管理性。线程是稀缺资源,如果无限制的创建,不仅会消耗系统资源,还会降低系统的稳定性,使用线程池可以进行统一的分配,调优和监控。

线程池的执行流程

1、提交一个新线程任务,线程池会在线程池中分配一个空闲线程,用于执行线程任务;

2、如果线程池中不存在空闲线程,则线程池会判断当前“存活的线程数”是否小于核心线程数。

  •         如果小于核心线程数,线程池会创建一个新线程(核心线程)去处理新线程任务;
  •         如果大于核心线程数,线程池会检查工作队列;

                如果工作队列未满,则将该线程任务放入工作队列中进行等待。线程池中如果出现空闲线程,及那个从工作队列中按照FIFO的规则取出一个线程任务并且分配执行;

                如果工作队列已满,则判断该线程任务是否达到最大线程数;

                       如果当前“存活线程数”没有达到最大线程数 ,则创建一个新线程(非核心线程)执行新线程任务;

                        如果当前“存活线程数”已经达到最大线程数,直接采用拒绝策略处理新线程任务;

综上所述,执行顺序为:核心线程、工作队列、非核心线程、拒绝策略

image.png

 线程池的状态

线程池的状态分为:RUNNING ,SHUTDOWN ,STOP , TIDYING, TERMINATED

        RUNNING :运行状态,线程池被一旦被创建,就处于RUNNING状 态,并且线程池中的任务数为 0 。该状态的线程池会接收新任务,并处理工作队列中的任务.

        调用线程池的 shutdown() 方法,可以切换到SHUTDOWN关闭状态;

        调用线程池的 shutdownNow() 方法,可以切换到 STOP 停止状 态;

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

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

        TIDYING:整理状态,该状态表明所有的任务已经运行终止,记录的任务数量为 0 ;

         terminated() 执行完毕,进入 TERMINATED状态;

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

线程池状态.webp

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

码农叮叮车

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

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

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

打赏作者

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

抵扣说明:

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

余额充值