为什么要用线程池?线程池的优点?线程池的主要参数和处理流程?有几种线程池?线程池的实现过程?

news/2024/11/17 20:26:38/

为什么要用线程池?

什么是线程池?

线程池是指在初始化一个多线程应用程序过程中创建一个线程集合,在需要执行新的任务重用这些线程而不是新建一个线程

使用线程池的好处?

  1. 线程池改进了一个应用程序的响应时间,由于线程池中的线程已经准备好且等待被分配任务,应用程序可以直接拿来使用而不用新建一个线程
  2. 线程池节省了CLR 为每个短生存周期任务创建一个完整的线程开销并可以在任务完成后回收资源
  3. 线程池根据当前在系统中运行的进程优化线程时间片
  4. 线程池允许开启多个任务不用为每个线程设置属性
  5. 线程池允许为正在执行的任务程序参数传递一个包含状态信息的对象引用
  6. 线程池可以用来解决处理一个特定请求最大线程数量限制问题                                                                                               

线程池的优点?

  1. 重用存在的线程减少对象创建销毁开销
  2. 控制最大并发线程数提高系统资源的使用率避免过多资源竞争,避免堵塞
  3. 提供定时执行定期执行单线程并发数控制等功能

线程池的主要参数和处理流程?

主要参数有:

  1. 线程池核心线程数大小
  2. 最大线程数
  3. 存储的队列
  4. 拒绝策略
  5. 空闲线程存活时长

处理流程有:

需要任务大于核心线程数时,把任务存放在存储任务的队列里,

存储队列,就开始增加线程池创建的线程数量

如果线程数量也达最,就开始执行拒绝策略(如记录日志,直接丢掉,或丢弃最老任务,或交给提交任务的线程执行)

当一个线程完成时,它会从队列中取下一个任务来执行,

当一个线程无事可做,且超过一定时间时,如果当前运行的线程数大于核心线程数,那这个线程会停掉

有几种线程池?线程池的实现过程?

1> newFixedThreadPool 创建一个指定大小线程池,每当提交一个任务创建一个线程,如果工作线程数量达到线程池初始的最大数,则将提交的任务存入到等待队列

2> newCachedThreadPool 创建一个可缓存线程池

特点是:

  • 工作线程创建数量几乎没有限制(其实也有限制的,数目为Interger.MAX_VALUE),这样可灵活的往线程池中添加线程
  • 如果长时间没有往线程池中提交任务,即如果工作线程空闲了指定的时间(默认为1分钟),则该工作线程将自动终止,终止后,如果又提交了新的任务,则线程池重新创建一个工作线程

3> newSingleThreadExecutor 常见一个单线程Executor,即之创建唯一的工作者线程来执行任务,如果这个线程异常结束,会有另一个取代它,保证顺序执行

4> newScheduleThreadPool 创建一个定长线程池,支持定时周期性任务执行,如Timer


http://www.ppmy.cn/news/244067.html

相关文章

基于html+css的图展示111

准备项目 项目开发工具 Visual Studio Code 1.44.2 版本: 1.44.2 提交: ff915844119ce9485abfe8aa9076ec76b5300ddd 日期: 2020-04-16T16:36:23.138Z Electron: 7.1.11 Chrome: 78.0.3904.130 Node.js: 12.8.1 V8: 7.8.279.23-electron.0 OS: Windows_NT x64 10.0.19044 项目…

KEIL5识别不了仿真器?

KEIL5识别不了你的仿真器? 第一种 1️⃣换一个USB接口 2️⃣重新安装你的keil5 第二种 更新你的驱动。 找到设备管理 之后找到 libusb-winxx-devices 再找到相应的BETTER_USB_XX; 更新驱动程序 之后选择让我从计算机上的可用驱动程序列表中选取 …

ARM学习笔记整理(五)

最近在使用ADS1.2调试S3C2440的时候遇到下面的问题: 1、在启动AXD后遇到 DBT Warning 00049: Image probably in wrong byte sex 这样的错误,经过多次试验,发现时JLink没有配置好的原因: CPU的Endian应该配置为Little endian&am…

STM32之STM Studio使用

STM-STUDIO是一个图形用户界面,允许采样和可视化的用户变量的实时应用程序运行时。它的目的是在个人电脑上使用微软的Windows操作系统上运行。此工具通过SWIM(单线接口模块),并通过JTAG或SWD(串行线调试)接…

STM-studio个人使用记录

个人使用 仅作记录 防止遗忘 文章目录 2022-12-18安装使用 2022-12-24关于STM-Studio时间间隔的补充 2022-12-18 安装 直接点击下一步下一步安装完成就可以 使用 新建项目 加载.axf文件,1-2-3 加载到图表中去 设置最大值最小值等参数 设置读取时间间隔 使用ST-LINK…

传感器系列之4.7地磁传感器

4.7地磁传感实验 一、实验目的1.掌握LPC2378芯片的编程方法 2. 掌握地磁传感器的工作原理 3. 掌握地磁传感器的使用流程 二、实验材料1.具有USB 串口通讯的PC 机1 台 2.ADS1.2 集成开发软件1 套 3.J-Link-ARM 仿真器及软件1 套 4.NXP LPC2378 实验节点板1 个 5.LCD…

传感器系列之3.2直流电机

3.2 直流电机实验 ###一、实验目的 掌握LPC2378芯片的编程方法了解直流电机的工作原理掌握直流电机的使用过程 ###二、实验材料 具有串口通讯的电脑一台ADS1.2开发环境J-Link-ARM仿真器一个NXP LPC2378实验节点板1个直流电机模块一个LCD显示实验板1个 ###三、实验原理 直流电机…

传感器系列之3.4继电器

3.4 继电器实验 一、实验目的 掌握LPC2378芯片的编程方法掌握LCD的驱动以及显示方法 二、实验材料 具有串口通讯的电脑一台ADS1.2开发环境J-Link-ARM仿真器一个LPC2378节点板一个继电器传感器模块一个 三、实验原理 直流电机实验环境由PC机(安装有Windows XP操作系…