线程池总结

news/2024/12/21 21:50:59/

1.JDK Executors线程池

2.JDK提供哪些默认的实现

  • newFixedThreadPool
  • newCachedThreadPool
  • newSingleThreadExecutor

3.为什么不允许使用默认实现

会OOM

4.介绍一下自定义线程池的几个常用参数,几个参数的值怎么定

5.线程池里的任务是IO密集型还是计算密集型

6.io密集型,CPU核数+1。为什么要加1?

当有线程阻塞(sleep、IO操作、等待锁)时,CPU释放,多出来的线程就可以充分利用CPU时间,相当于备份线程。可能还得考虑其他应用的线程配置情况

7.线程池满了怎么办

拒绝策略

8.线程池参数动态化

1)为什么要动态化?
因为不同时刻流量是不同的,流量不均衡
2)如何动态化?
将线程池的参数(如核心线程池、最大线程数、阻塞队列长度)迁移到分布式配置中心,实现线程池参数可配置和即时生效
3)动态化原理
3.1)setCorePoolSize
在运行期线程池使用方调用此方法设置核心线程数量,会覆盖原始值。并且会比较当前值和原始值,做不同动作

  • 当前值小于工作线程数,证明有多余线程,中断空闲线程,回收
  • 当前值大于原始值,且当前队列有任务待执行,新建worker线程,执行任务
    3.2)setMaximunPoolSize
    设置最大线程数量。
  • 校验参数合法性
  • 覆盖原来的值
  • 判断当前工作线程数是否大于最大线程数,是则向空闲线程发起中断请求

4)动态设置需要注意的地方

  • 可能会出现无效的情况,就是设置核心线程数的时候
  • getTask()获取任务时,会判断,如果工作线程数大于最大线程数,就会对工作线程数量进行-1操作,然后返回null。即没有获取到task,就会清理该任务
  • 解决:设置核心线程数的时候,同时设置最大线程数。如果调整之后活动线程数设置的值太大了,低峰期怎么办?当allowCoreThreadTimeOut设置为true时,核心线程在空闲时也会被回收。相当于线程池自动动态修改

5)动态指定队列长度

  • 因为LinkedBlockQueue的capacity是final修饰的,所以我们可以拷贝一份LinkedBlockingQueue的代码。修改capacity为非final,并提供对应的get/set方法
  • 在程序里用新的队列

线程池被创建后,就有线程吗?如果没有,可以对线程池进行预热吗?

线程池被创建后,没有任务时是没有线程的。预热有两个方法

全部启动:prestartAllCoreThreads()方法
仅启动一个:prestartCoreThread()方法

核心线程数会被回收吗需要什么设置?

默认是不能的。如果需要回收,则调用allowCoreThreadTimeOut(boolean value)


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

相关文章

Docker实战1-运行前端Vue项目

本次运行了两个项目,一个是开源的镜像,一个是自己的前端项目镜像 1 在docker中运行 keycloak docker run -p 8080:8080 -e KEYCLOAK_ADMINadmin -e KEYCLOAK_ADMIN_PASSWORDadmin quay.io/keycloak/keycloak:21.1.1 start-dev 这个最简单了&#xff0c…

audio标签事件

audio在音乐播放上用的频率极高,后来自己就查阅资料和度娘来总结了一下audio的JS事件: play:音频或视频文件已经就绪可以开始播放时触发 playing:音频或视频已开始播放时触发 ended:音频或视频文件播放完毕后触发 pause:音频或视频文件暂停时触发 ratech…

ospf的rip和ospf互通以及配置stub区域和totally stub

1. ospf与rip如何互通 我们需要在两台路由器上互相引入,如上图 AR5和AR6运行了rip,但AR5也运行了ospf要想路由器能够互相学习到路由,就需要在AR5上配置路由协议引入 什么是stub区域如何配置stub区域 Stub区域的功能:过滤4类LSA和5类LSA,对外产生缺省的…

java运算符

文章目录 一、Java 运算符1、算术运算符2、关系运算符3、位运算符4、逻辑运算符5、赋值运算符6、条件运算符(?:)7、Java运算符优先级 总结 一、Java 运算符 算术运算符 关系运算符 位运算符 逻辑运算符 赋值运算符 其他运算符1、算术运算符 算术运算符…

爱创科技携UDI解决方案亮相CMEF盛会!

2023年5月14日-17日,第87届中国国际医疗器械博览会(简称“CMEF”)在上海圆满举行。来自全世界20余个国家和地区品牌代表,近5000家企业参展,千余位业界大咖、意见领袖共聚盛会。 CMEF被业界看作全球医疗器械产业风向标&…

书评 | 《新程序员005:开源深度指南 新金融背后的科技力量》

目录 书评 | 《新程序员005:开源深度指南 & 新金融背后的科技力量》 内容介绍 书籍优点 书评 书评 | 《新程序员005:开源深度指南 & 新金融背后的科技力量》 内容介绍 《新程序员005:开源深度指南&新金融背后的科技力量》特…

Spring Boot 多环境配置

Spring Boot 多环境配置 在实际开发中,应用程序通常需要在不同的环境中运行,例如开发环境、测试环境和生产环境。每个环境可能需要不同的配置,包括数据库连接、日志级别、接口地址等等。Spring Boot 提供了多种方法来处理多环境配置&#xf…

支持导入 Eolink 插件,别小看这个开源 API 管理工具了

Postcat 有多达 30 款支持数据迁移、主题、API 安全等方面的插件。 导入 Eolink 插件。 使用 导入功能有多个入口,你可以在 API 分组处点击加号导入 API: 也可以换种方式,在首页里导入Eolink 如果你日常会用到 api 管理工具的话&#xff0c…