当前位置: 首页 > news >正文

线程池总结

线程池是一种使用预创建线程的集合来优化和管理线程使用的技术,以避免在请求时创建和销毁线程的开销。在Java中,线程池的核心实现是通过ThreadPoolExecutor类,它提供了执行提交任务的功能。

1.线程池的参数介绍

我们以jdk文档中的来详细介绍

      • public ThreadPoolExecutor(int corePoolSize,int maximumPoolSize,long keepAliveTime,TimeUnit unit,BlockingQueue<Runnable> workQueue,ThreadFactory threadFactory,RejectedExecutionHandler handler)

        创建一个新的 ThreadPoolExecutor与给定的初始参数。

        参数

     1.int corePoolSize

 (核心线程数)即使空闲时仍保留在池中的线程数,除非设置 allowCoreThreadTimeOut

 2.int maximumPoolSize

线程总数 包括核心线程数与非核心线程数)池中允许的最大线程数

    3.long keepAliveTime

非核心线程的最长摆烂时间)当线程数大于内核时,这是多余的空闲线程在终止前等待新任务的最大时间

    4. TimeUnit unit

     参数的时间单位

   5. BlockingQueue<Runnable> workQueue

用于在执行任务之前使用的队列。 这个队列将仅保存execute方法提交的Runnable任务

   先进后出队列模型

   6.ThreadFactory threadFactory

执行程序创建新线程时使用的工厂

   7.​​​​​​​ RejectedExecutionHandler handler

执行被阻止时使用的处理程序,因为达到线程限制和队列容量

以下为四种拒绝策略:

2.线程池的工作流程

当一个新任务提交到线程池时,线程池会按照以下流程处理任务:

  1. 核心线程检查:线程池首先检查核心线程池(corePoolSize)中是否有线程空闲。如果有空闲线程,就使用这些线程执行新任务。如果核心线程都在忙,则进入下一步。

  2. 任务队列检查:线程池会检查任务队列(workQueue)是否已满。如果队列未满,新提交的任务将被放入队列中等待执行。如果队列已满,则进入下一步。

  3. 最大线程数检查:线程池会检查当前运行的线程数是否小于最大线程数(maximumPoolSize)。如果小于,线程池会创建新的线程来执行任务。如果已达到或超过最大线程数,则任务将被拒绝,并执行拒绝策略(RejectedExecutionHandler)。

线程池有五种状态:RUNNINGSHUTDOWNSTOPTIDYINGTERMINATED。可以通过shutdown()shutdownNow()方法来关闭线程池。shutdown()方法会使线程池进入SHUTDOWN状态,只中断空闲线程;而shutdownNow()方法会使线程池进入STOP状态,中断所有线程

3.使用Executors创建常见的线程池

1newFixedThreadPool 创建一个固定大小的线程池,可控制线程最大并发数,超出的线程会在队列中等待。适用于负载比较重的服务器,为了资源的合理利用,需要限制当前线程数量。

2.newCachedThreadPool 创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程。适用于并发执行大量短期的小任务,或者是负载较轻的服务器。

相关文章:

  • 匠心打造超级 ping,多运营商多协议全方位测试,sir.net 正式上线!
  • R7周:糖尿病预测模型优化探索
  • WebUI可视化:第6章:项目实战:智能问答系统开发
  • 并发编程【深度解剖】
  • 命名空间(C++)
  • RT Thread 发生异常时打印输出cpu寄存器信息和栈数据
  • Ubuntu系统下交叉编译iperf3
  • 小白自学python第二天
  • 面试之消息队列
  • 全面认识Chroma 向量数据库中的索引和相似度
  • VS Code扩张安装目录
  • LLaMA3微调全流程:从LoRA到QLoRA,7B参数模型推理速度提升4倍的代码实战
  • C语言教程(十五):C 语言函数指针与回调函数详解
  • 差分对的返回电流-信号完整性分析
  • 【Vue3 实战】插槽封装与懒加载
  • 研0调研入门
  • chili3d调试笔记9 参数化建模+ai生成立方体
  • Linux用户管理实战:创建用户并赋予sudo权限的深度解析
  • 编程技能:调试07,启动和禁用断点
  • string容器训练算法题
  • 从篆刻书画到装帧设计,再看钱君匋的“艺兼众美”
  • 当哲学与戏剧作为一种生活方式——《人生六戏》分享会
  • 远程控制、窃密、挖矿!我国境内捕获“银狐”木马病毒变种
  • 云南富源回应“岔河水库死鱼”事件: 初步研判与水体缺氧有关
  • 陕西全省公开征集涉企行政执法问题线索,切实减轻企业负担
  • 俄外长拉夫罗夫将出席金砖国家外长会