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

关于线程池的执行流程和拒绝策略

使用线程池的好处为:

降低资源消耗:减少线程的创建和销毁带来的性能开销。

提高响应速度:当任务来时可以直接使用,不用等待线程创建

可管理性: 进行统一的分配,监控,避免大量的线程间因互相抢占系统资源导致的阻塞现象。

corePoolSize:表示核心线程池大小

maxinumPoolSize:表示线程池中允许创建的最大线程数

keepAliveTime:如果一个线程处于空闲状态的时间超过了该属性的值时,就会被消除

unit:表示keepAliveTime的时间单位

程池的执行流程是:先判断当前的线程数是否大于核心线程数?

如果结果为 false(大于核心的线程数),则新建线程并执行任务;

如果结果为 true(不大于核心的线程数),则判断任务队列是否已满?

如果结果为 false,则把任务添加到任务队列中等待线程执行,

否则则判断当前线程数量是否超过最大线程数?

如果结果为 false,则新建线程执行此任务,否则将执行线程池的拒绝策略

当任务过多且线程池的任务队列已满时,此时就会执行线程池的拒绝策略,线程池的拒绝策略默认有以下 4 种:

  • AbortPolicy:中止策略,当线程太多了忙不过来的时候线程池会抛出异常并中止执行此任务;
  • CallerRunsPolicy:如果任务做不完了,就让调用的(main)自己做,如果双方都不做这个任务则丢弃任务
  • DiscardPolicy:当线程比较多时,此时又安排了一个线程导致忙不过来时,优先执行新的任务,最旧的任务可以先不做
  • DiscardOldestPolicy:当线程比较多时,此时又安排了一个线程导致忙不过来时,优先执行老的任务,新的任务不着急做

默认的拒绝策略为 AbortPolicy 中止策略。

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

相关文章:

  • 【李忍考研传】二、约定
  • 2023-2-19 刷题情况
  • LeetCode笔记:Weekly Contest 333
  • 元数据管理 1
  • 统计二进制中比特1的个数
  • 第三方实现跑马灯和手写实现跑马灯
  • React Native Cannot run program “node“问题
  • python基于vue微信小程序 房屋租赁出租系统
  • ThreadPoolExecutor管理异步线程笔记
  • MotoSimEG-VRC教程:动态输送带创建以及示教编程与仿真运行
  • PyTorch 并行训练 DistributedDataParallel完整代码示例
  • Golang实现ttl机制保存内存数据
  • js中数字运算结果与预期不一致的问题和解决方案
  • C++ Primer Plus 学习笔记(一)——基本类型
  • ChatGpt与Google 谁能给出最好的回答
  • 【Redis】一、CentOS64 安装 Redis
  • Redis底层原理(持久化+分布式锁)
  • Spring Cloud Nacos实战(八) - Nacos集群配置
  • 什么是低代码-甲骨文对低代码的定义
  • shell编程之循环语句
  • 神经动力学-第一章-神经动力学基础-神经系统的元素
  • 【力扣-LeetCode】64. 最小路径和 C++题解
  • Mysql数据库事务
  • 【opencv源码解析0.3】调试opencv源码的两种方式
  • Xcode Archives打包上传 / 导出ipa 发布至TestFlight
  • RNN GRU模型 LSTM模型图解笔记
  • 西电_数字信号处理二_学习笔记
  • [ vulhub漏洞复现篇 ] Drupal 远程代码执行漏洞(CVE-2018-7602)
  • MySQL最佳实践
  • Python 之 Matplotlib 散点图、箱线图和词云图