线程池的简介说明

2023-10-27

在多线程应用程序开发中,如果我们不使用线程池,则每次创建和销毁线程将会消耗宝贵的CPU,内存资源,所以我们必须创建一个线程池

线程池的功能

线程池用于管理线程,用于减少系统资源消耗

创建一个线程池

实现思路:
     借助线程池类Executor
	 借助其构造方法
	 public ThreadPoolExecutor(int corePoolSize,  
                              int maximumPoolSize,  
                              long keepAliveTime,  
                              TimeUnit unit,  
                              BlockingQueue<Runnable> workQueue,  
                              ThreadFactory threadFactory,  
                              RejectedExecutionHandler handler)

ThreadPoolExecutor构造方法的功能:
定义线程池的各种属性:
线程池中的corePoolSize就是线程池中的核心线程数量,这几个核心线程,只是在没有用的时候,也不会被回收
maximumPoolSize就是线程池中可以容纳的最大线程的数量
keepAliveTime,就是线程池中除了核心线程之外的其他的最长可以保留的时间,因为在线程池中,除了核心线程即使在无任务的情况下也不能被清除,其余的都是有存活时间的,非核心线程可以保留的最长的空闲时间
util,就是计算这个时间的一个单位
workQueue,就是等待队列,任务可以储存在任务队列中等待被执行,执行的是FIFIO原则(先进先出)
threadFactory,就是创建线程的线程工厂
handler,是一种拒绝策略,当任务满了,拒绝执行的策略

handler的拒绝策略

  1. AbortPolicy:不执行新任务,直接抛出异常,提示线程池已满
  2. DisCardPolicy:不执行新任务,也不抛出异常
  3. DisCardOldSetPolicy:将消息队列中的第一个任务替换为当前新进来的任务执行
  4. CallerRunsPolicy:直接调用execute来执行当前任务

常见的线程池

  1. CachedThreadPool:可缓存的线程池,该线程池中没有核心线程,非核心线程的数量为Integer.max_value,就是无限大,当有需要时创建线程来执行任务,没有需要时回收线程,适用于耗时少,任务量大的情况
  2. SecudleThreadPool:周期性执行任务的线程池,按照某种特定的计划执行线程中的任务,有核心线程,但也有非核心线程,非核心线程的大小也为无限大。适用于执行周期性的任务
  3. SingleThreadPool:只有一条线程来执行任务,适用于有顺序的任务的应用场景
  4. FixedThreadPool:定长的线程池,有核心线程,核心线程的即为最大的线程数量,没有非核心线程

参阅资料:

        线程池的简介说明

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

线程池的简介说明 的相关文章

  • Grails 3.x bootRun 失败

    我正在尝试在 grails 3 1 11 中运行一个项目 但出现错误 失败 构建失败并出现异常 什么地方出了错 任务 bootRun 执行失败 进程 命令 C Program Files Java jdk1 8 0 111 bin java
  • 在 Java 中连接和使用 Cassandra

    我已经阅读了一些关于 Cassandra 是什么以及它可以做什么的教程 但我的问题是如何在 Java 中与 Cassandra 交互 教程会很好 如果可能的话 有人可以告诉我是否应该使用 Thrift 还是 Hector 哪一个更好以及为什
  • 如何为最终用户方便地启动Java GUI程序

    用户想要从以下位置启动 Java GUI 应用程序Windows 以及一些额外的 JVM 参数 例如 javaw Djava util logging config file logging properties jar MyGUI jar
  • 为什么 i++ 不是原子的?

    Why is i Java 中不是原子的 为了更深入地了解 Java 我尝试计算线程中循环的执行频率 所以我用了一个 private static int total 0 在主课中 我有两个线程 主题 1 打印System out prin
  • Java中反射是如何实现的?

    Java 7 语言规范很早就指出 本规范没有详细描述反射 我只是想知道 反射在Java中是如何实现的 我不是问它是如何使用的 我知道可能没有我正在寻找的具体答案 但任何信息将不胜感激 我在 Stackoverflow 上发现了这个 关于 C
  • Java EE:如何获取我的应用程序的 URL?

    在 Java EE 中 如何动态检索应用程序的完整 URL 例如 如果 URL 是 localhost 8080 myapplication 我想要一个可以简单地将其作为字符串或其他形式返回给我的方法 我正在运行 GlassFish 作为应
  • Java - 将节点添加到列表的末尾?

    这是我所拥有的 public class Node Object data Node next Node Object data Node next this data data this next next public Object g
  • 在 HTTPResponse Android 中跟踪重定向

    我需要遵循 HTTPost 给我的重定向 当我发出 HTTP post 并尝试读取响应时 我得到重定向页面 html 我怎样才能解决这个问题 代码 public void parseDoc final HttpParams params n
  • JAXb、Hibernate 和 beans

    目前我正在开发一个使用 Spring Web 服务 hibernate 和 JAXb 的项目 1 我已经使用IDE hibernate代码生成 生成了hibernate bean 2 另外 我已经使用maven编译器生成了jaxb bean
  • Android MediaExtractor seek() 对 MP3 音频文件的准确性

    我在使用 Android 时无法在eek 上获得合理的准确度MediaExtractor 对于某些文件 例如this one http www archive org download emma solo librivox emma 01
  • 无法解析插件 Java Spring

    我正在使用 IntelliJ IDEA 并且我尝试通过 maven 安装依赖项 但它给了我这些错误 Cannot resolve plugin org apache maven plugins maven clean plugin 3 0
  • 十进制到八进制的转换[重复]

    这个问题在这里已经有答案了 可能的重复 十进制转换错误 https stackoverflow com questions 13142977 decimal conversion error 我正在为一个类编写一个程序 并且在计算如何将八进
  • 在两个活动之间传输数据[重复]

    这个问题在这里已经有答案了 我正在尝试在两个不同的活动之间发送和接收数据 我在这个网站上看到了一些其他问题 但没有任何问题涉及保留头等舱的状态 例如 如果我想从 A 类发送一个整数 X 到 B 类 然后对整数 X 进行一些操作 然后将其发送
  • 为什么HashMap不能保证map的顺序随着时间的推移保持不变

    我在这里阅读有关 Hashmap 和 Hashtable 之间的区别 http javarevisited blogspot sg 2010 10 difference Between hashmap and html http javar
  • 使用Caliper时如何指定命令行?

    我发现 Google 的微型基准测试项目 Caliper 非常有趣 但文档仍然 除了一些示例 完全不存在 我有两种不同的情况 需要影响 JVM Caliper 启动的命令行 我需要设置一些固定 最好在几个固定值之间交替 D 参数 我需要指定
  • 如何从终端运行处理应用程序

    我目前正在使用加工 http processing org对于一个小项目 但是我不喜欢它附带的文本编辑器 我使用 vim 编写所有代码 我找到了 pde 文件的位置 并且我一直在从 vim 中编辑它们 然后重新打开它们并运行它们 重新加载脚
  • Android 中麦克风的后台访问

    是否可以通过 Android 手机上的后台应用程序 服务 持续监控麦克风 我想做的一些想法 不断聆听背景中的声音信号 收到 有趣的 音频信号后 执行一些网络操作 如果前台应用程序需要的话 后台应用程序必须能够智能地放弃对麦克风的访问 除非可
  • 在 Maven 依赖项中指定 jar 和 test-jar 类型

    我有一个名为 commons 的项目 其中包含运行时和测试的常见内容 在主项目中 我添加了公共资源的依赖项
  • 当我从 Netbeans 创建 Derby 数据库时,它存储在哪里?

    当我从 netbeans 创建 Derby 数据库时 它存储在哪里 如何将它与项目的其余部分合并到一个文件夹中 右键单击Databases gt JavaDB in the Service查看并选择Properties This will
  • 如何实现仅当可用内存较低时才将数据交换到磁盘的写缓存

    我想将应用程序生成的数据缓存在内存中 但如果内存变得稀缺 我想将数据交换到磁盘 理想情况下 我希望虚拟机通知它需要内存并将我的数据写入磁盘并以这种方式释放一些内存 但我没有看到任何方法以通知我的方式将自己挂接到虚拟机中before an O

随机推荐

  • rdesktop架构解析(RDP协议分析)

    转载自 http blog csdn net songbohr article details 5309650 本文立足于rdesktop的架构层次进行解析 算是抛砖引玉 国内对RDP协议深入解析的资料到本文发布时为空白 ps 昨天在nok
  • UVM基础-sequence library

    一 sequence library的用法 1 1 sequence library在环境中的使用 uvm sequence library定义为是一堆sequence的集合 本质上其实就是uvm sequence 只不过在普通的uvm s
  • Python实现一个情人节必备表白神器——跳动的爱心,基于tkinter实现

    前言 包子们 晚上好 一般能够看到这篇文章的小伙伴 不是单身狗 那也得是一个贵族 如果你有心仪的对象啦 如果你想表白一个女生啦 如果你还在想着怎么表白女神 这不是就给大家安排好了 跳动的爱心 怎么说呢 用这个表白也可以的 万一就成了呢 哈哈
  • GOF设计模式(04)桥接模式

    简介 一 定义 1 概念 桥接 Bridge 模式 将抽象部分与其实现部分分离 使得他们都可以独立地变化 它是一种对象结构型模式 又称为接口模式 桥接符合开闭原则和单一职责原则 2 理解 在使用桥接模式时 我们首先应该识别出一个类所具有的两
  • CNN、RNN用于时间序列预测的代码接口和数据格式详解(pytorch)

    网上对时序问题的代码详解很少 这里自己整理对CNN和RNN用于时序问题的代码部分记录 便于深入理解代码每步的操作 本文中涉及的代码 https github com EavanLi CNN RNN TSF a toy 一 1D CNN 1
  • [人工智能-深度学习-32]:卷积神经网络CNN - 常见分类网络- AlexNet网络结构分析与详解

    作者主页 文火冰糖的硅基工坊 文火冰糖 王文兵 的博客 文火冰糖的硅基工坊 CSDN博客 本文网址 https blog csdn net HiWangWenBing article details 120837261 目录 第1章 卷积神
  • Eclipse Mars(4.5.2) 安装Gradle 插件

    第一步 选择Eclipse Marketplace 第二步 搜索Buildship gradle插件 并安装 第三步 gradle 安装授权协议 第四步 点击confim 完成安装后要求重启 Eclipse 第五步 Eclipse查看是否有
  • 2023牛客暑假多校训练营2

    D The Game of Eating 贪心 题目说每个人只关心自己享用的菜肴 而不考虑他人 每个人的目标都是使得自己喜欢的菜肴尽可能多 也就是说每个人都很鸡贼 它们当下都是做出最有利于自己的选择 对于某一个人 他首先会算在他之后他最喜欢
  • 计算机探秘二 (算盘与二进制)

    上次我们说到如何将数字通过CPU的电路线 后面我们称为数据线 传给它 在说这个问题前 我们一起看下咱老祖宗发明的计算神器 算盘 它长这样的 算盘分上珠和下珠 下珠每个珠子表示一个 上珠每个珠子表示5个 上下珠之间有一根细长的圆杆相连 具体计
  • linux驱动程序运行优先级,如何调整Linux内核启动中的驱动初始化顺序(late_initcall和module_init)...

    在init h 中有如下定义 define pure initcall fn define initcall 0 fn 1 define core initcall fn define initcall 1 fn 1 define core
  • STM32串口IAP(YModem) (转载)

    在之前的 STM32串口IAP 一文中 通过传输数据流来升级程序 但是这种 裸 数据的传输方式存在这许多的问题 比如它没有容错机制 不能保证数据的正确传输 还比如说它无法获知升级文件的信息 导致它在判断何时停止接收数据上 犹豫不决 正式为了
  • Cobalt-Strike基本使用

    Cobalt Strike 简介 Cobalt Strike 简称为CS 是一款基于java的渗透测试工具 尤其是后渗透阶段 自3 0开始已经不再使用Metasploit框架而作为一个独立的平台使用 这款工具有其他很多渗透测试工具没有的团队
  • Git-远程仓库(GitLab)

    系列文章 Git 入门小结 Git 分支 Git 常用命令 Git 注册远程仓库 Git 远程仓库 1 生成SSH KEY ssh keygen t rsa C youremail xx com git里注册的邮箱 可以用git confi
  • MybatisPlus更新时会自动忽略传值为NULL的字段

    三种方案解决MybatisPlus更新时会自动忽略传值为NULL的字段 一 背景 二 解决方案 2 1 使用 TableField updateStrategy FieldStrategy IGNORED 注解添加在字段上 在枚举 Fiel
  • Python数据分析与大数据技术与应用高级教程

    Python数据分析与大数据技术与应用高级教程 教程地址 https www piaodoo com 课程目标 虚拟现实 增强现实及混合现实技术既密切相关 又有显著差别 培训课程旨在帮助学员深入理解这三者的思想精髓及其统一技术构架 梳理出V
  • Hexo 完整使用教程

    官网 官网地址 https hexo io zh cn 环境 1 node hexo 基于 node 所以首先要安装node环境 2 npm 包管理工具 环境配置请参考本站对应安装教程 快速开始 安装 hexo npm install g
  • Mysql数据库内联查询、左连接查询、右连接查询、自连接查询介绍

    目录 一 内联查询 1 inner join 只查询键值一致 交叉 的部分 2 演示 二 左连接 1 left join 以左表为标准 查询输出左表中没有的字段信息 2 演示 三 右连接 1 right join 以右表为标准 查询输出右表
  • 区块如何防篡改_一种区块链防篡改技术的优化方法与流程

    本发明涉及区块链技术领域 具体涉及一种区块链防篡改技术的优化方法 背景技术 区块链是比特币等数字虚拟货币的底层技术 通过去中心化的数据记录 由全网所有的节点共同维护数据 实现安全地存储数据 具有不可伪造性 不可篡改性 可追溯性 匿名性等特点
  • Java编程练习之:水仙花数

    文章目录 1 题目 2 思路 3 代码 4 运行结果 1 题目 打印出所有的 水仙花数 所谓 水仙花数 是指一个三位数 其各位数字立方和等于该数本身 例如 153是一个 水仙花数 因为153 1的三次方 5的三次方 3的三次方 2 思路 这
  • 线程池的简介说明

    在多线程应用程序开发中 如果我们不使用线程池 则每次创建和销毁线程将会消耗宝贵的CPU 内存资源 所以我们必须创建一个线程池 线程池的功能 线程池用于管理线程 用于减少系统资源消耗 创建一个线程池 实现思路 借助线程池类Executor 借