线程最大线程数什么时候会被创建

2023-11-09

线程最大线程数什么时候会被创建


前言

之前一直错误的以为线程池在执行过程中会先判断核心数然后在判断最大线程数最后才加入队列。。。完全错误!

已经下已代码展示最大线程数量在什么时候才会被创建


1.首先创建一个队列长度只有10的时候 启动10个线程。

/**
 * <p>
 * </p>
 *
 * @author ll Create on 20/9/9 15:46
 * @version 1.0
 */
public class ThreadPoll {

    // 线程最大线程数什么时候会被创建
    // 1.线程池执行过程,先看线程数是否已经到达核心数。没有就创建新的线程
    // 2.如果线程数和核心数相等就将任务加到阻塞队列中,
    // 3.如果塞队队列满了的话就去判断线程数量是否到达最大线程数,没有就创建新的线程
    // 4.如果已经创建了最大线程数就执行拒绝策略
    public static void main(String[] args) throws ExecutionException, InterruptedException {
        ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(2, 10, 5L, TimeUnit.SECONDS,
                new ArrayBlockingQueue<>(10));
        List<Future<String>> fatureList = new ArrayList<>();
        for (int i = 0; i < 10; i++) {
            Future<String> faFutureTask = threadPoolExecutor.submit(new TestThreadPoll(String.valueOf(i)));
            fatureList.add(faFutureTask);
        }
        for (Future<String> future : fatureList) {
            String s = future.get();
            // System.out.println(s);
        }
        threadPoolExecutor.shutdown();
    }


}


// 线程类
public class TestThreadPoll implements Callable {

    private String name;

    TestThreadPoll(String name) {
        this.name = name;
    }

    @Override
    public String call() {
        System.out.println(name + "当前线程名称:" + Thread.currentThread().getName());
        return name;
    }
}
任务队列长度为10,启动10个任务执行结果如下

 

上图能看出启动10个线程后并没有创建最大线程数来执行任务,而是只创建了2线程在分别处理这10个任务

 

然后我们把代码修改一下,启动20个任务的时候我们看一下会发生什么情况

队列长度为10,启动20个任务的时候结果如下

 

这里可以看出来创建了超过核心数的 线程数量。

 

到此 思考一下为什么10个任务的时候只创建了两个线程,但是创建20个任务的时候就可以创建到最大线程数

10个任务的时候,队列长度最大也为10,就导致了队列没有满所以不会创建超过核心数的线程数量

但是20个任务的时候 队列中肯定是已经满了超过了队列的长度,这个时候线程池就会创建新的线程。创建新的县城时会判断是不是超过了最大线程数,是的话就抛出异常,不是的话就会创建一个新的线程。

 

总结

这里就验证了线程池在运行过程中,当线程数量与核心数量一致的时候。并不是当任务来了就直接创建一个新的线程去执行,而是先放到缓冲队列中,队列满的时候才会去判断最大线程数 从而决定是执行拒绝策略还是创建新的线程

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

线程最大线程数什么时候会被创建 的相关文章

  • SpringBoot 2 元素未绑定

    我的 Spring Boot 应用程序有一个文件 application yml 该应用程序不愿意运行 根据日志 元素 simulator geo b12 simulator geo b13 simulator geo b21 simula
  • LoaderManager 不接受“这个”

    好吧 我投降 我想不明白 我正在学习 Udacity 的 Android 基础知识课程 需要了解如何使用加载器加载数据 但是 当我使用以下行时 this 以红色突出显示并显示以下错误 Wrong 3rd argument type Foun
  • Java 的 RSA 算法库 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我想为我的应用程序提供基于 RSA 算法的简单许可机制 有免费的 RSA 库吗 只需使用javax crypto and java sec
  • Log4j2 自动配置

    我在应用时遇到问题log4j2 xml自动配置正确 我认为这与我的文件夹排列有关 我在用着maven添加 log4j2 库并按如下方式安排我的项目 一个包含所有 通用 类的项目 供我的系统的服务器和客户端使用 另一个 核心 项目 服务器端应
  • 将 Spring 的 @Scheduled 注解与特定执行器一起使用

    如何告诉我的 Spring 计划方法使用特定的执行器运行 例如 这是我的 spring 调度程序方法之一 Scheduled fixedRate 1000 public void scheduleJobs doThese 这是我的 Java
  • 如何在gradle中执行jar文件?

    当我使用 ant 构建我的 android 项目时 我需要这样的任务
  • android OpenGl 如何绘制一个矩形

    我想用OpenGL画一个矩形 package jnidemo example com openglsquare import android content Context import android opengl GLSurfaceVi
  • 在总是抛出方法之后如何检测死代码?

    考虑以下代码 Test public void testDeadCode letsThrow System out println will never be reached private final void letsThrow thr
  • Java 更改包名称大小写约定的原因

    就在你说这是重复的之前 我已经看到了其他问题 但我仍然想发布这个 所以我在读用 Java 思考 Bruce Eckel这段话是关于小写命名约定的 Java 1 0 和 Java 1 1 中的域扩展com edu org net等 按照惯例都
  • 在手机上单步执行 Android 代码 - 大行号差异

    我正在尝试调试与 Samsung Captivate Galaxy S 上的 ListView 相关的一些代码 我在代码中的某个位置放置了断点 当它停止时 我会在堆栈上返回几帧到 ListView 源 现在 我可以预期会出现一些不匹配的情况
  • SAP Spartacus 表单个性化

    如果已经有使用给定电子邮件注册的帐户 我需要修改注册表以显示错误消息 SAP Hybris 后端 Angular 中的 Spartacus 店面 目前 我有一个自定义验证器类 它可以正常工作 import org springframewo
  • 编辑 CSV 文件(设计实现)

    我开始设计一个程序 该程序将根据已找到并保存到主 CSV Excel 文件中的相似字符串及其标识 自动执行正确查找和识别字符串的过程 现在我想正确设计它 这样我以后在实现 CSV Excel 读写部分时就不会遇到问题 我可能会使用 Open
  • Java 字节码中循环的检测 - 区分后沿类型

    背景 在提出问题之前 我想声明我已检查以下链接 识别java字节码中的循环 https stackoverflow com questions 6792305 identify loops in java byte code Java 字节
  • 如何将报告导出为 PDF/A-1a、PDF/A-1b?

    在 jasper report 中生成 PDF A 包含许多陷阱 并且某些版本的 jasper report 不支持 这就是为什么我决定通过这个Question Answer 帖子 指示将带有图表的简单报告导出为 PDF A 所需的步骤和库
  • 使用 int 作为 java.util.Dictionary 的类型参数

    当我尝试这样声明字典时 private Dictionary
  • 如何用 JSON 表示数据库中的图像

    我需要基于数据库中的 blob 创建 JSON 为了获取 blob 图像 我使用下面的代码并在 json 数组中显示之后 Statement s connection createStatement ResultSet r s execut
  • Resilience4j 重试 - 记录来自客户端的重试尝试?

    是否可以使用resilience4j在客户端记录重试尝试 也许通过某种配置或设置 目前 我正在将resilience4j与Spring boot Webflux一起使用基于注释 它运作良好 该项目很棒 当我们将服务器日志放在服务器端时 为了
  • XStream:xstream 1.3.1 中具有属性和文本节点的节点?

    我想使用 XStream 将对象序列化为这种形式的 XML
  • 根据 netbeans 中的单选按钮切换组件的“启用”属性

    我在按钮组中有两个单选按钮 在同一面板中我有一个文本框和一个按钮 我想仅在选择第二个按钮时启用文本框和按钮 并在选择另一个单选按钮时禁用文本框和按钮 我已经尝试过这个但没有成功 private void radio button2Actio
  • JavaFX - 当文本字段具有焦点时加速器不工作

    在我的应用程序中 我有一个使用加速器的屏幕 我正在使用功能键 F3 在我的应用程序中执行操作 它每次都工作正常 但是当我单击此屏幕上的任何文本字段时 功能键不会执行 这是我设置加速器的代码 scene getAccelerators put

随机推荐

  • Yii Framework 开发教程(10) UI 组件 自定义组件

    在介绍Yii内置UI组件之前 先介绍一下如何自定义组件 这样也有助于理解CWidget的用法 自定义组件就是重载 CWidget的init 和 run 方法 php view plain copy print class MyWidget
  • CSS —— html 自动换行

    涉及三个属性 white space 规定如何处理空白 是否换行 默认值 normal 超出时自动换行 word wrap normal 默认 只在内容的断点换行 即不能断开单词 或 break word 长单词内也可换行 word bre
  • Django笔记--python实现将分页功能封装成类

    Django笔记 python实现将分页功能封装成类 对于数据的表格形式呈现 庞大的数据量不可能全部放在一页中 除非数据很少 所以基本上都需要用到分页功能 因此有必要将分页功能封装成一个类 方便使用 pagination py 将分页功能分
  • 探探提醒对方账号异常_我告诉你探探账号异常不能回复消息怎么办

    解决方法 有多种原因 如果是账号被封 无法回复短信 如果是网络异常导致 建议切换网络再回复 如果是软件出现bug 可以进行反馈 在探探3 7 5版本中 打开软件 点击页面右下角的 我 点击设置 选择 帮助与反馈 之后输入遇到的问题 点击提交
  • 代码随想录算法训练营第四十九天

    好像看懂了二维数组 滚动数组还有点懵
  • 教你用简单上手的序列帧动画制作一个Unity的Loading加载界面

    文章目录 一 Loading界面序列帧动画原理 二 准备工作及搭建demo场景 三 核心代码及演示效果 1 核心脚本代码 2 帧动画加载界面效果 一 Loading界面序列帧动画原理 我们都知道电影或者说视频都是由一序列静止画面组成的 动画
  • ElementUI的el-select怎样实现下拉多选并实现给下拉框赋值和获取值

    场景 要实现的效果如下 官方示例代码实现多选 为el select设置multiple属性即可启用多选 此时v model的值为当前选中值所组成的数组 默认情况下选中值会以 Tag 的形式展现 你也可以设置collapse tags属性将它
  • springboot学习(八十三) springboot中自定义某个对象的JSON序列化反序列化方式

    文章目录 前言 一 自定义注解 二 自定义序列化处理 三 自定义反序列化处理 四 使用 前言 springboot可自定义JSON序列化和反序列化方式 一 自定义注解 Retention RetentionPolicy RUNTIME Ja
  • 新浪股票行情数据接口有什么作用?

    通过新浪股票行情数据接口可以让投资者在实际交易当中能够更加精准的洞悉盘口变化 该接口可以说是目前最好用的免费股票行情数据接口了 虽然一直并未公开 但暂时使用良好 大家用浏览器访问新浪的股票行情数据接口就能查看最新行情数据了 那么今天小编简单
  • C++中的内置类型以及类型转换

    在开始介绍类型转换之前 我们先了解一下C 中的数据类型 不太清楚的朋友可以先看下第一部分的介绍 1 C 中的内置类型 C 中的内置内型主要分为基本类型和复合类型 1 1基本类型 基本类型主要指整数和浮点数 而整数又可以分为short int
  • JAVA垃圾回收机制

    大家好 我是皮卡 这次分享的是JAVA垃圾回收机制 如果有需要或是感兴趣的话 就一起看下去吧 目录 一 手动垃圾回收机制 二 自动垃圾回收机制 1 概念 2 判断哪些对象有用 3 finalize方法 final finally final
  • docker 命令学习

    帮助命令 dockers version 显示docker的版本信息 docker info 显示docker的系统信息 包括镜像和容器数量 docker 命令 help 帮助命令 通过这个查看命令参数等 在官方文档查看命令 https d
  • 软件测试(二)——软件测试的方法

    基于直觉和经验的方法 基于经验和直觉推测程序中所有可能存在的各种错误 从而有针对性地设计测试用例 1 Ad hoc测试方法和ALAC测试 ALAC 是Act like a customer 象客户那样做 的简写 ALAC测试方法是一种基于客
  • 虚拟ip的概念

    1 虚拟IP是什么 要是单讲解虚拟 IP 理解起来很困难 所以干脆把 动态 IP 固定 IP 实体 IP 与虚拟 IP都讲解一下 加深理解和知识扩展 实体 IP 在网络的世界里 为了要辨识每一部计算机的位置 因此有了计算机 IP 位址的定义
  • 3-论文笔记--《Privacy-preserving and Efficient Aggregation based on Blockchain for Power Grid...》

    题目 Privacy preserving and Efficient Aggregation based on Blockchain for Power Grid Communications in Smart Communities 基
  • 理解构造器为什么不能被继承

    不能 因为子类继承父类的时候 先运行父类构造函数 具体的说就是运行父类时就会先 调用 父类的构造函数 注意 调用 和继承不是一个含义 实质上是 自动运行 继承 extends 的含义其实是 扩展 子类完全没必要扩展父类的构造函数 因为反正每
  • eslint自定义规则(禁用 localStorage和sessionStorage)

    背景 项目为了统一管理localStorage和sessionStorage 使用了统一的方法对Storage进行存取 为限制项目成员直接使用localStorage和sessionStorage 需要通过eslint对直接引用的形式加以限
  • 我与GPT的一次关于Orb-SLAM3源码(包括2)的深入对话

    目录 一 前言 二 关于Orb SLAM3的代码结构 三 关于system 3 1 关于摄像头初始化 3 2 关于摄像头模型化 3 2关于初始化 四 关于ORBVocabulary 五 关于优化 六 小结 一 前言 Orb SLAM2或者3
  • 【微信小程序】微信退款注意事项及退款通知信息解密

    1 商户退款单号 out refund no 必须唯一 如果不唯一微信端返回的错误提示是 支付单号校验不一致 需要注意 2 退款解密算法注意操作密钥 在此记录下解密代码 1 对加密串A做base64解码 得到加密串B 2 对商户key做md
  • 线程最大线程数什么时候会被创建

    线程最大线程数什么时候会被创建 前言 之前一直错误的以为线程池在执行过程中会先判断核心数然后在判断最大线程数最后才加入队列 完全错误 已经下已代码展示最大线程数量在什么时候才会被创建 1 首先创建一个队列长度只有10的时候 启动10个线程