线程池在接受到30个比较耗时的任务时的状态,在前面30个比较耗时的任务还没执行完成的情况下,再来多少个任务会触发拒绝策略?

devtools/2024/11/20 0:40:53/
htmledit_views">

目录

一、提出问题

二、解答

问题 1: 线程池在接受到30个比较耗时的任务时的状态

问题 2: 在前面30个比较耗时的任务还没执行完成的情况下,再来多少个任务会触发拒绝策略?

总结


一、提出问题

我们首先自定义一个线程池

html" title=java>java">new ThreadPoolExecutor(10,30,60,TimeUnit.SECONDS,new LinkedBlockingQueue<>(1000),new NamedthreadFactory("myPool"));

拿着这个线程池,当这个线程池在正常工作的前提下,问两个问题:

  1. 如果这个线程池接受到了30个比较耗时的任务,这个时候线程池的 状态(或者说数据)是怎样的?
  2. 在前面30个比较耗时的任务还没执行完成的情况下,再来多少个任 务会触发拒绝策略?

二、解答

问题 1: 线程池在接受到30个比较耗时的任务时的状态

我们先看第一个问题,在接受到30个比较耗时的任务时,线程池的状态如下:

  1. 核心线程数 (corePoolSize):10
    首先,线程池会启动10个核心线程来处理前10个任务。这些任务会立即开始执行。

  2. 任务队列 (workQueue):1000
    在核心线程已经全部被占用的情况下,剩下的任务(第11个到第30个)会被放入工作队列中。这些任务会等待直到有线程空闲。

  3. 最大线程数 (maximumPoolSize):30
    因为任务队列尚未达到其容量上限,所以线程池不会再创建新的线程来处理任务。也就是说,线程池中的线程数仍保持在10个。

  4. 线程池状态

    • 线程数:10个线程正在运行。
    • 工作队列:工作队列中有20个任务在等待执行。
    • 队列大小:队列中剩余可用空间为980(1000 - 20)。

因此,线程池在接受到30个耗时任务时,10个任务正在执行,20个任务在队列中等待。

问题 2: 在前面30个比较耗时的任务还没执行完成的情况下,再来多少个任务会触发拒绝策略?

在前面30个比较耗时的任务还没执行完成的情况下:

  1. 工作队列 (workQueue)

    • 当前工作队列中已经有20个任务在等待,还有980个空位。
  2. 最大线程数 (maximumPoolSize):30

    • 线程池已经启动了10个核心线程,所有核心线程都在忙碌。
    • 工作队列还没有填满(容量是1000)。

因此,在此时再提交980个任务,这些任务将会被放入队列而不会触发拒绝策略。

第981个任务:当第981个任务被提交时,队列已经满了。此时,线程池将会创建新的线程来处理任务,因为还未达到最大线程数。线程池最多可以创建20个额外的线程(从10个到最大30个),这些线程会立即处理新提交的任务。

触发拒绝策略的条件:如果再提交任务使得线程池中的线程数达到了最大线程数(30个),且任务队列已满(1000个任务在等待),那么再提交第1001个任务时,就会触发拒绝策略。

总结

触发拒绝策略前:前面30个耗时任务已占据了所有核心线程和部分工作队列,队列还有980个空位。因此,接下来的980个任务可以被接受,而不会触发拒绝策略。

触发拒绝策略时:再提交的任务数使得队列满且线程数达到最大值(30个),此时再提交的任务(第1001个任务)会触发拒绝策略。


http://www.ppmy.cn/devtools/104759.html

相关文章

【开端】基于nginx部署的具有网关的web日志分析

一、绪论 基于nginx部署的具有网关的web日志分析&#xff0c;我们可以分析的日志有nginx的access.log &#xff0c;网关的日志和应用的日志 二、日志分析 1、nginx日志 参数 说明 示例 $remote_addr 客户端地址 172.17.0.1 $remote_user 客户端用户名称 -- $time_lo…

【零知识证明】Groth16

一 相关介绍 1 Groth16 Groth16是一种用于零知识证明系统中的简洁非交互式知识论证(SNARK)协议&#xff0c;是一种表示计算的方式&#xff0c;在算术电路上操作&#xff0c;使用加法和乘法门。使用配对友好的椭圆曲线来实现高效的证明生成和验证。 Groth16的主要特点包括: …

机器学习之实战篇——预测二手房房价(线性回归)

机器学习之实战篇——预测二手房房价(线性回归&#xff09; 前言数据集和实验文件下载相关文章推荐实验过程导入相关模块数据预处理手动梯度下降训练使用scikit-learn随机梯度下降 前言 实验中难免有许多缺陷和错误&#xff0c;望批评指正&#xff01; 数据集和实验文件下载 …

Python进阶————面向对象高级

面向对象高级 前言一、继承1.1. 单继承1.2. 多继承1.3. 方法重写1.4. 子类调用父类方法1.4.1 父类名.父类方法名()1.4.2 super().父类方法名() 1.5. 多层继承 二、封装2.1. 私有属性2.2. 私有方法 三、多态3.1. 多态的条件3.2. 多态的定义 四、面向对象的其他特性4.1. 对象属性…

【C++ Primer Plus习题】8.6

问题: 解答: #include <iostream> using namespace std;template <typename T> T maxn(T arr[], int len)//通用 {T max 0;for (int i 0; i < len; i){if (max < arr[i]){max arr[i];}}return max; }template<> const char* maxn<const char*&g…

基于 ASP.NET的教材管理信息系统的设计与实现(最新定制开发,阿龙原创设计)✅

博主介绍&#xff1a; ✌我是阿龙&#xff0c;一名专注于Java技术领域的程序员&#xff0c;全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师&#xff0c;我在计算机毕业设计开发方面积累了丰富的经验。同时&#xff0c;我也是掘金、华为云、阿里云、InfoQ等平台…

谷歌浏览器http自动跳转https问题

1.地址栏输入&#xff1a; chrome://net-internals/#hsts 2.找到底部Delete domain security policies一栏&#xff0c;输入想处理的域名&#xff0c;点击delete。 3.搞定了&#xff0c;再次访问http域名不再自动跳转https了。

【C++】智能指针——auto_ptr,unique_ptr,shared_ptr

目录 auto_ptr unique_ptr shared_ptr 并发问题 循环引用问题 个人主页&#xff1a;传送门——>东洛的克莱斯韦克 智能指针的原理&#xff1a;传送门——>智能指针的原理 auto_ptr 使用方法参考官方文档 传送门——>auto_ptr文档 auto_ptr并不是一个优秀的智能…