当任务数超过线程池的核心线程数时,如何让它不进入队列,而是直接启用最大线程数

线程池工作原理

当我们提交一个任务到线程池的时候,它的工作原理分为四步:

  1. 第一步,预热核心线程
  2. 第二步,把任务添加到阻塞队列
  3. 第三步,如果添加到阻塞队列失败,则创建非核心线程增加处理效率
  4. 第四步,如果非核心线程数达到了阈值,就触发拒绝策略

SynchronousQueue

所以,如果希望这个任务不进入队列,那么只需要去影响第二步的执行逻辑就行了。Java 中线程池提供的构造方法里面,有一个参数可以修改阻塞队列的类型。其中,就有一个阻塞队列叫 SynchronousQueue(如图), 这个队列不能存储任何元素。它的特性是,每生产一个任务,就必须要指派一个消费者来处理,否则就会阻塞生产者。

基于这个特性,只要把线程池的阻塞队列替换成 SynchronousQueue。就能够避免任务进入到阻塞队列,而是直接启动最大线程数去处理这个任务。

相关推荐
const_qiu4 分钟前
第四章 05:4.5 Multi-Agent —— 五个专职智能体协作
java·人工智能
我就是不信7 分钟前
Java8 lambda 表达式 forEach 如何提前终止?
开发语言·windows·python
Cx330❀9 分钟前
深入浅出 Qt 绘图机制:从 QPainter 到四大图像类解析
开发语言·qt·ui·性能优化·图形渲染
A小码哥11 分钟前
大模型成本怎么降,5 个动作先做前两个
java·前端·spring
鬼手点金14 分钟前
构建有效 Agent 的核心原则
java·人工智能·git·学习·自动化
神魔皆以血嗜20 分钟前
Java 实现简单状态机(订单状态流转)
java·后端
信可维21 分钟前
AI 读 Word 表格总读错?先查合并单元格和表头这 3 处
开发语言·人工智能·c#·word·软件工程
随性而行36029 分钟前
企业微信 API 如何实现业务消息自动通知?接口应用场景解析
java·人工智能·后端·微信·机器人·企业微信
姜九笙56135 分钟前
python学习---归来仍是新人
java·python·学习
HEJOO91 小时前
Java 并发运行中的安全问题详解
java·开发语言