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

线程池常用的阻塞队列

新任务来的时候,会先判断当前运行的线程数量是否达到核心线程数,如果达到的话,新任务就会被存放在队列中。
不同的线程池会选用不同的阻塞队列,我们可以结合内置线程池来分析。
● 容量为 Integer.MAX_VALUE 的 LinkedBlockingQueue (无界队列):FixedThreadPool和 SingleThreadExector。FixedThreadPool 最多只能创建核心线程数的线程(核心线程数和最大线程数相等),SingleThreadExector 只能创建一个线程(核心线程数和最大线程数都是 1),二者的任务队列永远不会被放满。
● SynchronousQueue(同步队列):CachedThreadPool。SynchronousQueue 没有容量,不存储元素,目的是保证对于提交的任务,如果有空闲线程,则使用空闲线程来处理;否则新建一个线程来处理任务。也就是说,CachedThreadPool 的最大线程数是Integer.MAX_VALUE,可以理解为线程数是可以无限扩展的,可能会创建大量线程,从而导致 OOM。
● DelayedWorkQueue(延迟阻塞队列):ScheduledThreadPool 和SingleThreadScheduledExecutor。DelayedWorkQueue 的内部元素并不是按照放入的时间排序,而是会按照延迟的时间长短对任务进行排序,内部采用的是“堆”的数据结构,可以保证每次出队的任务都是当前队列中执行时间最靠前的。DelayedWorkQueue添加元素满了之后会自动扩容原来容量的 1/2,即永远不会阻塞,最大扩容可达Integer.MAX_VALUE,所以最多只能创建核心线程数的线程。

http://www.lryc.cn/news/296800.html

相关文章:

  • 【Java EE】----SpringBoot的日志文件
  • 【网络安全】2024年暗网威胁分析及发展预测
  • SpringMVC-组件解析
  • ubuntu22.04@laptop OpenCV Get Started: 002_reading_writing_videos
  • Elasticsearch(ES) 简述请求操作索引下文档 增删查改操作
  • Chrome扩展开发纪要
  • LeetCode-第28题-找出字符串中第一个匹配项的下标
  • 分享90个行业PPT,总有一款适合您
  • 【原创 附源码】Flutter海外登录--Tiktok登录最详细流程
  • 国内chatGPT3.5升级到chatGPT4.0的教程(24年2月更新)
  • 【python量化交易】qteasy使用教程01 - 安装方法及初始化配置
  • UML 2.5图形库
  • 分享springboot框架的一个开源的本地开发部署教程(若依开源项目开发部署过程分享持续更新二开宝藏项目PostgresSQL数据库版)
  • 打卡今天学习 Linux
  • 单片机精进之路-3流水灯
  • c# File.WriteAllLines 和 File.WriteAllText
  • linux系统定时任务管理
  • mysql的慢sql优化
  • 排序算法---插入排序
  • 迷你世界勒索病毒,你的文件被删了吗?
  • QT styleSheet——控件设置样式表
  • Linux学习
  • MFC研发自验用例编写应注意哪些关键测试点
  • ChatGPT升级版本GPT-4V(ision)支持多模态语音和图像
  • 机器人搬砖 - 华为OD统一考试
  • 10分钟快速入门正则表达式
  • 【C++】C++的简要介绍
  • Golang数据库编程详解 | 深入浅出Go语言原生数据库编程
  • 《游戏引擎架构》 -- 学习2
  • #Js篇:js里面递归的理解