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

线程池的简单介绍及使用

线程池

  • 线程池的参数介绍
    • 拒绝策略
  • 线程池的任务处理流程
  • 使用Executors创建常见的线程池

线程池的参数介绍

在这里插入图片描述

  • corePoolSize: (核心线程数)这是线程池中始终存在的线程数,即使这些线程处于空闲状态。
  • maximumPoolSize:(最大线程数) 是线程池允许的最大线程数。
  • keepAliveTime:(保持存活时间)这是非核心线程(超过corePoolSize的线程)在变为空闲状态后可以在队列中等待新任务的最长时间。超过这个时间,如果队列中没有新任务,线程会被终止。
  • unit:时间单位
  • workQueue:这是一个阻塞队列,用于存放等待执行的任务。
  • threadFactory:这是一个用于创建新线程的工厂。
  • handler:这是拒绝策略,用于处理线程池无法处理新任务的情况。

拒绝策略

  • AbortPolicy:超过负荷,直接抛出异常
  • CallerRunsPolicy: 由添加任务的线程负责执行
  • DiscardOldestPolicy:丢弃队列中最⽼的任务
  • DiscardPolicy():丢弃新来的任务

线程池的任务处理流程

如果正在运行的线程数小于corePoolSize,则线程池会创建一个新的工作线程来执行任务。
如果正在运行的线程数大于或等于corePoolSize,任务会被存入工作队列中等待。
如果队列满了,且正在运行的线程数小于maximumPoolSize,线程池会创建一个非核心线程来执行任务。
如果队列满了,且正在运行的线程数大于或等于maximumPoolSize,线程池会采用拒绝策略来处理该任务。

使用Executors创建常见的线程池

  1. newFixedThreadPool:创建一个固定大小的线程池。
  2. newSingleThreadExecutor:创建一个只有一个线程的线程池。因为只有一个线程,所以任务会按照提交顺序依次执行。
  3. newCachedThreadPool:创建一个可缓存的线程池。线程池的大小会根据需要自动调整,空闲线程会在一定时间后被回收。
  4. newScheduledThreadPool:创建一个定时任务的线程池。可以按指定的时间间隔执行任务。
http://www.lryc.cn/news/284064.html

相关文章:

  • 使用Python的pygame库实现下雪的效果
  • qt学习:进度条,水平滑动条,垂直滑动条+rgb调试实战
  • C语言中的浮点数存储
  • Pypputeer自动化
  • selenium爬虫爬取当当网书籍信息 | 最新!
  • PTA 7-1 最大子列和问题
  • JAVA实现向Word模板中插入Base64图片和数据信息
  • 深入浅出关于go web的请求路由
  • HarmonyOS—开发环境诊断的功能
  • Golang个人web框架开发-学习流程
  • java面试题(23):Spring Bean如何保证并发安全
  • HarmonyOS【应用服务开发】在模块中添加Ability
  • 根据屏幕尺寸设置html根字号fontSize大小并刷新
  • Flutter 中的 InteractiveViewer:轻松实现交互性
  • UE4 添加按键输入事件 并在蓝图中使用按键输入节点
  • Go 语言命名规范:清晰、简洁、一致
  • 代码随想录训练营第三十期|第十天|栈与队列part01|理论基础● 232.用栈实现队列● 225. 用队列实现栈
  • Backtrader 文档学习-Indicators混合时间框架
  • 网络攻击与检测防御:维护数字安全的关键挑战
  • 使用 Vector 在 Kubernetes 中收集日志
  • ardupilot开发 --- 固件定制(OEM) 篇
  • 爬虫代理IP在电商行业的应用
  • Vue配置语法检查及关闭语法检查的说明
  • 【Linux】yum
  • 安装sftpgo
  • JS-元素尺寸与位置
  • 2024-01-15(SpringMVCMybatis)
  • Node+Express编写接口---前端
  • 防火墙技术
  • 图灵日记之java奇妙历险记--String类