ThreadsPool

简介: ThreadsPool

Java线程池

  • 池化技术:池化技术是一种缓存需要复用的东西到池中;以避免重复创建、销毁的性能开销
  • 线程池执行逻辑
  • Java中线程池拥有三种级别的线程容器
  • 核心线程(优先级最高)
  • 等待队列
  • 非核心线程(优先级最低)
  • Java线程池主要参数含义
  • corePoolSize:线程池拥有核心线程数目
  • maximumPoolSize:线程池拥有最大线程数目
  • ctl:有效线程执行数目
  • threadFactory:线程创建的工厂
  • RejectedExecutionHandler:线程池饱和的拒绝策略
  • keepAliveTime:线程存活时间
  • BlockingQueue:任务等待队列
  • Java线程池的主要队列类型
队列名称 中文解释
SynchronousQueue 同步队列
LinkedBlockingQueue 无边界队列
ArrayBlockingQueue 有界队列
  • 同步队列以及无边界队列都有可能导致线程的长时间等待
  • 无边界队列的取舍?
  • 大池小队列:降低系统CPU的使用率以及系统资源的使用率,但是系统的吞吐量会人为下降
  • 小池大队列:提升系统的CPU切换频繁,系统的吞吐量也会受影响
  • 线程池的状态
状态名称 解释
RUNNING 接受新任务并处理排队任务
SHUTDOWN 不接受新任务,但处理排队任务
STOP 不接受新任务,不处理排队任务,中断进行中的任务
TIDYING 所有任务都已终止,workerCount为零,当状态为TIDYING时,会执行terminated()
TERMINATED 执行完terminated(),线程池会处于此状态
  • 线程池种类
  • newFixedThreadPool
  • 重用固定数目线程的线程池
  • newWorkStealingPool
  • 支持线程并行度的线程池,支持并行处理任务,但是不保证有序
  • newSingleThreadExecutor
  • 核心线程数目、最大线程池都为1的线程池
  • newCachedThreadPool
  • 该线程池不存在核心线程数目,但是线程池大小为Integer的最大值,会缓存线程,此线程池的所有线程的生命时间为60S
  • newSingleThreadScheduledExecutor
  • 可执行线程数目最大为1的任务周期循环调度单线程执行器
  • newScheduledThreadPool
  • 与newSingleThreadScheduledExecutor类似,只不过这个支持多线程,newSingleThreadScheduledExecutor只支持单线程
  • 线程池的线程容器依赖
线程池名称 容器名称
newFixedThreadPool LinkedBlockingQueue
newSingleThreadExecutor LinkedBlockingQueue
newCachedThreadPool SynchronousQueue
newSingleThreadScheduledExecutor DelayedWorkQueue
newScheduledThreadPool DelayedWorkQueue
  • 线程池的大小取舍
  • 线程数目的选择在于压榨CPU的性能
  • CPU密集型:存在大量CPU计算,IO的时间很短
  • 若为单CPU=1:则PoolSize=1;因为同时只能处理一个,因此核心线程数目设置为1,减少了线程切换的开销
  • 若为多CPU=n:则PoolSize=n+1;保证当一个CPU处理完成后,能够立即执行其余的线程
  • IO密集型:存在大量IO,CPU计算时间短
  • 设CPU个数为n,则线程池大小应该为2n,假设当前所有线程需要IO,此时CPU需要n的线程才不会空转
目录
相关文章
|
安全 前端开发
FastAPI(56)- 使用 Websocket 打造一个迷你聊天室 (上)
FastAPI(56)- 使用 Websocket 打造一个迷你聊天室 (上)
399 0
FastAPI(56)- 使用 Websocket 打造一个迷你聊天室 (上)
|
Linux 索引 Perl
zynq操作系统: Linux驱动开发Bram篇
zynq操作系统: Linux驱动开发Bram篇
938 0
|
3月前
|
XML 负载均衡 前端开发
ajax的优缺点有哪些?
ajax的优缺点有哪些?
32 1
|
3月前
选择特定后缀文件/删除文件夹中文件特定后缀名字
选择特定后缀文件/删除文件夹中文件特定后缀名字
|
JSON Linux 数据格式
ChatGPT无所不知?? 怎么可能? vscode启用括号对参考线, 他就不知道
一开始我是这样问的 问ChatGPT vscode , 当我点击某个括号时, 显示配对的括号, 有一条线连接两个括号, 怎么实现? vscode自带这个功能吗? 或者用什么插件扩展
420 0
ChatGPT无所不知?? 怎么可能? vscode启用括号对参考线, 他就不知道
|
传感器 数据格式
【STM32】 DHT11温湿度传感器模块学习总结
DHT11模块是一个数字温湿度传感器,是一款含有已经校验数字信号输出的传感器,它其中包含有了电阻式的感知湿度的模块元件和一个可以测温的NTC模块元件,并且和一个高性能的八位单片机相结合。
【STM32】 DHT11温湿度传感器模块学习总结
|
机器学习/深度学习 算法 开发者
回归模型的显著性检验-1| 学习笔记
快速学习回归模型的显著性检验-1。
1872 0
回归模型的显著性检验-1| 学习笔记
|
监控 中间件 应用服务中间件
鹰眼跟踪、EDAS燎原, 看高性能服务框架EDAS的架构实践
8月30日~31日2016蚂蚁金服&阿里云在线金融技术峰会拉开帷幕,阿里云中间件技术部资深专家沈询带来了“基于阿里企业级分布式应用服务(EDAS)的敏捷服务开发与架构实践”的重要演讲。
16399 0