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

Java并发面试题:(二)线程池参数和使用

线程池参数

在这里插入图片描述

线程池工作过程

当提交一个新任务到线程池时,具体的执行流程如下:

  1. 当我们提交任务,线程池会根据corePoolSize大小创建若干任务数量线程执行任务

  2. 当任务的数量超过corePoolSize数量,后续的任务将会进入阻塞队列阻塞排队

  3. 当阻塞队列也满了之后,那么将会继续创建(maximumPoolSize-corePoolSize)个数量的线程来
    执行任务,如果任务处理完成,maximumPoolSize-corePoolSize额外创建的线程等待

keepAliveTime之后被自动销毁

  1. 如果达到maximumPoolSize,阻塞队列还是满的状态,那么将根据不同的拒绝策略对应处理
    在这里插入图片描述

创建线程池

《阿里巴巴Java开发手册》中强制线程池不允许使用 Executors 去创建,而是通过
ThreadPoolExecutor 的方式,这样的处理方式让写的同学更加明确线程池的运行规则,规避资源耗尽
的风险**

Executors 返回线程池对象的弊端如下:
FixedThreadPool 和 SingleThreadExecutor : 允许请求的队列长度为
Integer.MAX_VALUE,可能堆积大量的请求,从而导致OOM。

CachedThreadPool 和 ScheduledThreadPool : 允许创建的线程数量为
Integer.MAX_VALUE ,可能会创建大量线程,从而导致OOM。

方式一:通过构造方法实现
在这里插入图片描述
方式二:通过Executor 框架的工具类Executors来实现 我们可以创建三种类型的

ThreadPoolExecutor:

FixedThreadPool : 该方法返回一个固定线程数量的线程池。该线程池中的线程数量始终不变。
当有一个新的任务提交时,线程池中若有空闲线程,则立即执行。若没有,则新的任务会被暂存在
一个任务队列中,待有线程空闲时,便处理在任务队列中的任务。

SingleThreadExecutor: 方法返回一个只有一个线程的线程池。若多余一个任务被提交到该线程
池,任务会被保存在一个任务队列中,待线程空闲,按先入先出的顺序执行队列中的任务。

CachedThreadPool: 该方法返回一个可根据实际情况调整线程数量的线程池。线程池的线程数
量不确定,但若有空闲线程可以复用,则会优先使用可复用的线程。若所有线程均在工作,又有新
的任务提交,则会创建新的线程处理任务。所有线程在当前任务执行完毕后,将返回线程池进行复
用。
对应Executors工具类中的方法如图所示:
在这里插入图片描述

拒绝策略

  1. AbortPolicy:直接丢弃任务,抛出异常,这是默认策略
  2. CallerRunsPolicy:只用调用者所在的线程来处理任务
  3. DiscardOldestPolicy:丢弃等待队列中最旧的任务,并执行当前任务
  4. DiscardPolicy:直接丢弃任务,也不抛出异常
http://www.lryc.cn/news/193510.html

相关文章:

  • Python机器学习零基础理解AffinityPropagation亲和力传播聚类
  • Open3D 进阶(12)PCA拟合空间直线
  • 4种实现JS深拷贝的方法
  • 六、RocketMQ发送事务消息
  • Node.js初体验
  • 激活函数理解
  • 【docker - 安装】windows 10 专业版 安装docker,以及 WSL kernel version too low 解决方案
  • 洛谷P1601
  • Elasticsearch:使用 LangChain 对话链和 OpenAI 的聊天机器人
  • 铜死亡+机器学习+WGCNA+分型生信思路
  • GB28181平台简介
  • JVM基础:初识JVM
  • 至强服务器BIOS/UEFI驱动开发笔记
  • Linux:Termius连接本地虚拟机与虚拟机快照
  • 高校教务系统登录页面JS分析——四川大学
  • Kafka SASL认证授权(四)认证源码解析
  • 软件测试学习(一)基础概念、实质、说明书测试、分类、动态黑盒测试
  • 在fastapi中实现异步
  • js数组去重
  • 【前端】根据后端返回的url进行下载并设置文件下载名称
  • 《视觉SLAM十四讲》公式推导(一)
  • 简单好用的解压缩软件:keka 中文 for mac
  • 【UE 插件】UE4 虚幻引擎 插件开发(带源码插件打包、无源码插件打包) 有这一篇文章就够了!!!
  • C# CodeFormer 图像修复
  • Android Studio的笔记--HttpURLConnection使用GET下载zip文件
  • phantom3D模体
  • 贪心算法解决批量开票限额的问题
  • Unity后台登录/获取数据——BestHTTP的使用Get/Post
  • 【Windows日志】记录系统事件的日志
  • 物联网开发学习笔记——目录索引