线程池的执行流程

线程池是预先创建线程来执行任务的技术,减少创建和销毁开销,提高性能和稳定性。它包含任务队列、工作线程和管理器。线程池能优化资源管理,避免系统崩溃,适应不同负载,并提高代码复用性。执行流程涉及任务分配和拒绝策略。线程池有RUNNING、SHUTDOWN、STOP、TIDYING和TERMINATED五种状态。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、什么是线程池


        线程池是一种预先创建一定数量的线程,然后将多个任务分配给这些线程来执行的技术,它可以最大程度地减小线程的创建和销毁造成的开销,提高系统的性能和稳定性。线程池通常包含三个重要的组件:任务队列、工作线程和管理器,其中任务队列用于保存等待执行的任务,工作线程用于执行任务,管理器用于创建、销毁和监控线程池中的线程,以及分配任务给空闲线程。线程池可以提高程序的响应速度,减少资源占用率,提高系统的可扩展性和可靠性。

二、线程池的优点


  • 提高性能:线程池可以最大程度地减少线程的创建和销毁造成的开销,提高系统的性能和响应速度。
  • 减少资源占用率:线程池可以有效地管理线程资源,避免线程数量过多导致的资源浪费和系统负载过大。
  • 提高稳定性:线程池可以避免线程过多导致的系统崩溃和不稳定性,确保系统持续稳定运行。
  • 提高可扩展性:线程池可以方便地配置和调整线程数量,适应不同的系统需求和负载。
  • 提高代码复用性:线程池可以将线程管理和任务调度等通用功能封装起来,可以在不同的应用场景中复用。

三、线程池的执行流程


  1. 创建新线程任务,有空余核心线程(最小线程数),给其分配空余的核心线程
  2. 没有空余线程且没有达到核心线程数,创建新的核心线程分配
  3. 达到核心线程且工作队列没满,将其放入工作队列,等待核心线程出现空闲
  4. 工作队列已满且非核心线程数(最大线程数)未满,创建非核心线程分配
  5. 非核心线程数已满,执行拒绝策略(

  • ThreadPoolExecutor.AbortPolicy :默认策略,丢弃任务并抛出 Rejected ExecutionException 异常;

  • ThreadPoolExecutor.DiscardPolicy :丢弃任务,但是不抛出异常;

  • ThreadPoolExecutor.DiscardOldestPolicy :丢弃工作队列中的队头任务(即最旧的任务,也就是最早进入队列的任务)后,继续将当前任务提交给线程池;

  • ThreadPoolExecutor.CallerRunsPolicy :由原调用线程处理该任务 (谁调用,谁处理);、

四、线程池的状态

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

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

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

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

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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值