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

【JUC】阻塞队列|DelayQueue延时原理|CompletableFuture异步API大全

大家好,我是程序员二叉。


简介

本篇讲解BlockingQueue阻塞队列核心作用、四大常用队列差异与场景、DelayQueue底层延时实现、CompletableFuture全套高频异步API,生产环境高频工具类面试必背。欢迎点赞关注收藏。


一、BlockingQueue 阻塞队列核心作用

  1. 线程安全容器:自带锁机制,多线程并发put/take无竞态异常
  2. 双向阻塞能力
    • 队列已满:生产者调用put()阻塞等待空位
    • 队列为空:消费者调用take()阻塞等待元素
  3. 解耦生产者-消费者模型,削峰填谷,平衡上下游线程执行速度
  4. 自带批量操作、超时存取、非阻塞存取多种API适配不同业务

二、四大主流阻塞队列区别&适用场景

1. ArrayBlockingQueue

  • 底层:有界固定数组,初始化必须指定容量
  • 锁机制:全局一把ReentrantLock,读写操作互斥不能并行
  • 适用:流量可控、固定缓冲大小的同步生产消费场景

2. LinkedBlockingQueue

  • 底层:单向链表,默认无界,可传容量设为有界
  • 锁机制:生产者、消费者两把独立锁,读写可并行,吞吐量更高
  • 适用:高吞吐异步任务、ThreadPoolExecutor线程池默认工作队列

3. SynchronousQueue

  • 无存储缓冲区,不存放任何元素;put必须匹配一个take才交付
  • 支持公平/非公平模式,无容量限制
  • 适用:瞬时高并发、任务不排队,CachedThreadPool底层队列

4. DelayQueue

  • 无界优先阻塞队列,元素必须实现Delayed延时接口
  • 只有延时到期的元素才能被take取出
  • 适用:定时任务、订单超时关闭、会话过期、接口延迟重试

三、DelayQueue 底层完整原理

  1. 内部依托PriorityQueue优先队列,按照元素剩余延时时间升序排序,队首是最快到期任务
  2. 全局一把ReentrantLock,搭配一个Condition等待队列
  3. take()执行流程:
    1. 加锁取出队首延时任务
    2. 判断延时是否到期,到期直接取出返回
    3. 未到期则await阻塞等待,释放锁
    4. 新延时任务入队会唤醒阻塞线程,重新校验队首时间
  4. 业务元素实现Delayed接口,重写getDelay()返回剩余延时毫秒

四、CompletableFuture 高频常用API

1. 创建异步任务

// 无返回值异步CompletableFuture.runAsync(Runnabletask);// 有返回值异步CompletableFuture.supplyAsync(Supplier<T>task);

2. 完成回调(成功 / 失败都会执行)

whenComplete(BiConsumer<T, Throwable>)

3. 异常单独兜底处理

exceptionally(Function<Throwable,T>)异常时返回默认兜底结果

4. 串行链式执行

  • thenApply():接收上一步结果,转换返回新值
  • thenAccept():消费上一步结果,无返回值
  • thenRun():不接收结果,单纯执行后续任务

5. 多任务组合编排

  • thenCombine():两个任务全部完成,合并两者结果
  • applyToEither():两个任务谁先执行完,使用最先完成的结果
  • allOf():阻塞等待所有异步任务全部执行完毕
  • anyOf():任意一个任务完成就立刻结束等待

6. 阻塞获取结果

  • get():阻塞拿结果,抛出受检异常
  • get(long, TimeUnit):带超时阻塞获取
  • join():阻塞拿结果,只抛运行时异常,无需 try-catch 受检异常

面试速记总结

  1. 阻塞队列平衡生产消费;Array固定数组、Linked双锁高吞吐、Synchronous零缓冲
  2. DelayQueue基于优先队列排序延时任务,到期才可取出
  3. CompletableFuture替代原始Future,支持链式回调、多任务组合、异常统一处理
http://www.jsqmd.com/news/998897/

相关文章:

  • 2026 娄底卫生间漏水不用砸砖?微创补漏靠谱方案 - 苏易修缮
  • 2026荆门建筑材料检测权威机构排行 TOP 建材检测 + 见证取样 + 主体结构检测 附电话地址 - 中检检测集团
  • 如何在Word中优雅使用APA第7版格式:告别手动排版的烦恼
  • CANdevStudio终极指南:开源CAN总线仿真与开发平台深度解析
  • 计算机毕业设计之django在线音乐网站推荐系统
  • 从CGCS2000到WGS84:Arcmap中那些让人头疼的坐标系,到底该怎么选、怎么用?
  • 2026攀枝花建筑材料检测权威机构排行 TOP 建材检测 + 见证取样 + 主体结构检测 附电话地址 - 中检检测集团
  • 基于NXP SLN-POS-RDR方案的预认证支付终端开发实战指南
  • Noto字体完全指南:如何免费获取900+语言支持的终极字体解决方案
  • MySQL 的 EXPLAIN 语句及用法
  • 【JAVA毕设源码分享】基于springboot饮食疗养平台(程序+文档+代码讲解+一条龙定制)
  • 2026晋城商户及市民高频选择的 5 家食品检测第三方机构实地测评整理 - 科信检测
  • 九大网盘直链下载神器:告别限速烦恼的终极解决方案
  • 2026克拉玛依企业高频选择的 5 家高分子检测第三方机构实地测评整理 - 鉴安检测
  • 互联网技术演化:从协议叠加到基础设施重构
  • 西双版纳傣族自治州2026年本地黄金回收铂金白银回收哪家强?TOP5 正规门店榜单 +联系方式 - 三大殿
  • 如何快速解决iPhone USB网络共享驱动问题:终极完整指南
  • 如何快速掌握WarcraftHelper:魔兽争霸3辅助工具的完整入门指南
  • 如何在5分钟内为Beyond Compare 5生成永久授权密钥的完整指南
  • 肺炎与胸部疾病检测:CNN-ViT 混合架构的工程实践
  • 2026九江本地人认可的 5 家户外广告设施检测机构实地测评汇总+市民高频选择 - 中安检测集团
  • AI专著撰写指南:10分钟上手AI工具,快速生成20万字专著书稿
  • 莆田市手表回收包包回收哪家店更好,2026甄选以下5家店铺排名前5 - 谊识预商务
  • 30分钟掌握yuzu:在PC上畅玩Switch游戏的完整配置指南
  • 告别会员限制!5分钟掌握LX Music桌面版:免费跨平台音乐播放器终极指南
  • 原神帧率解锁工具:3步实现144Hz高帧率游戏体验终极指南
  • 全自动评论系统发生严重错误----------已经修复
  • 别再死记硬背了!用Python+Matplotlib画张图,5分钟搞懂贝叶斯公式
  • VCP-DCV 2024考试内容全解:vSphere 8.0核心考点通俗备考教程
  • 1GHz DSP芯片MSC8251架构解析与医疗影像系统应用实战