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

线程池的工作原理

线程池可以减少创建和销毁线程的次数,从而减少系统资源的消耗。当一个任务(Runnable或Callable对象)(Runnable无返回值,Callable有返回值)被提交到线程池时:

一、首先判断核心线程池中的线程是否已经满了,如果没满,则创建一个核心线
程来执行任务,否则进入下一步。


二、判断工作队列是否已满,没有满则加入工作队列,否则执行下一步。


三、判断线程数是否达到了最大值,如果不是,则创建非核心线程执行任务,否
则执行饱和策略(需要实现接口RejectedExecutionHandler。默认为ThreadPoolExecutor.AbortPolicy策略,会抛出RejectedExecutionException异常)。
1.内置的饱和策略:
1).ThreadPoolExecutor.AbortPolicy:拒绝执行任务。
2).ThreadPoolExecutor.CallerRunsPolicy:由调用者线程执行该任务。
3).ThreadPoolExecutor.DiscardPolicy:丢弃任务。
4).ThreadPoolExecutor.DiscardOldestPolicy:丢弃最旧的任务并尝试重新提交新任务。
2.也可以自定义RejectedExecutionHandler接口来满足实际需求。


四、引申
1.线程池中的线程数超过核心线程数时,多余的线程会在空闲一段时间(超过某个阈值keepAliveTime)后被销毁,以减少资源消耗。
2.核心线程即使处于空闲状态也不会被销毁。
3.可以通过shutdown()方法来关闭线程池:此方式会等待线程池中的所有任务都执行完成后再关闭线程池。
4.可以通过shutdownNow()方法来关闭 线程池:此方式会尝试停止正在执行的任务后关闭线程池。
5.关闭线程池时会停止接受新任务。
 


微风不燥,阳光正好,你就像风一样经过这里,愿你停留的片刻温暖舒心。

我是程序员小迷(致力于C、C++、Java、Kotlin、Android、Shell、JavaScript、TypeScript、Python等编程技术的技巧经验分享),若作品对您有帮助,请关注、分享、点赞、收藏、在看、喜欢,您的支持是我们为您提供帮助的最大动力。

欢迎关注。助您在编程路上越走越好!

http://www.lryc.cn/news/380176.html

相关文章:

  • Nikto一键扫描Web服务器(KALI工具系列三十)
  • 全局变量和局部变量
  • [机器学习算法]支持向量机
  • Springboot应用的信创适配
  • TypedDict 解析
  • Windows11和Ubuntu22双系统安装指南
  • Dockerfile-php7.4.33
  • 如何降低MCU系统功耗?
  • 移动端 UI 风格,诠释精致
  • 【408考点之数据结构】数组和特殊矩阵的压缩存储
  • 26、matlab多项式曲线拟合:polyfit ()函数
  • VMR,支持30+种编程语言的SDK版本管理器,支持Windows/MacOS/Linux。
  • 模板初阶【C++】
  • 搭建Vue的环境
  • [学习笔记]-MyBatis-Plus简介
  • 2024.6.23 刷题总结
  • mysql查询不同用户(操作记录)的最新一条记录
  • Java中如何使用设计模式来解决编程问题?
  • 单机、集群和分布式
  • qt开发-10_LineEdit
  • 福昕PDF编辑器快速去除PDF水印方法
  • Cloudflare 常用操作
  • elementUI的table使用展开功能( type=“expand“ ),展开时合起上一次展开的内容,始终保持展开内容为一个,并且再次点击合起自身
  • 【金】?Y? python网页前端streamlit
  • 数据仓库之Lambda架构
  • Apriori 处理ALLElectronics事务数据
  • Content Provider:深入解析Android数据共享的核心组件
  • 069、Python 函数的递归调用
  • 数仓开发那些事_番外
  • Vue3+TypeScript项目实战——打造雨雪交加的智慧城市