当前位置: 首页 > 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.zskr.cn/news/1510668.html

相关文章:

  • MySQL 的 EXPLAIN 语句及用法
  • 2026晋城商户及市民高频选择的 5 家食品检测第三方机构实地测评整理 - 科信检测
  • 2026克拉玛依企业高频选择的 5 家高分子检测第三方机构实地测评整理 - 鉴安检测
  • 2026九江本地人认可的 5 家户外广告设施检测机构实地测评汇总+市民高频选择 - 中安检测集团
  • 别再死记硬背了!用Python+Matplotlib画张图,5分钟搞懂贝叶斯公式
  • 1GHz DSP芯片MSC8251架构解析与医疗影像系统应用实战
  • VCP-DCV 2024考试内容全解:vSphere 8.0核心考点通俗备考教程
  • 前端性能优化综合
  • 2026佛山建筑材料检测权威机构排行 TOP 建材检测 + 见证取样 + 主体结构检测 附电话地址 - 中检检测集团
  • 协同封装光学技术能否变革数据中心?
  • Windows 11任务栏拖放功能终极修复指南:高效恢复缺失的生产力特性
  • 工业级遗传算法:自适应参数、局部搜索与多样性维持三大支柱
  • 5分钟掌握百度网盘提取码智能查询:告别手动搜索的烦恼
  • 指纹浏览器:如何解决底层 Hook 导致的 JS 堆栈特征自爆问题?
  • 如何在Krita中实现AI图像生成:5分钟快速上手完整指南
  • window删除多余的操作系统
  • OpenCL事件对象:异步编程与GPU任务同步的核心机制
  • Three.js实现的球面全景视频播放器(带拖拽旋转、缩放和播放控制)
  • 专升本资料领取|资料包|资料已整理
  • 告别网盘限速:一站式智能直链解析工具完全指南
  • 2026年6月最新深圳税企应对公司排行及避坑指南 - 互联网科技品牌测评
  • WenQuanYi Micro Hei:5MB轻量级开源中文字体终极解决方案
  • StreamFX终极指南:如何免费打造专业直播效果
  • 为什么完全离线的语音转文本应用正在改变我们的工作方式?
  • 别再混淆了!一文讲透防火墙双机热备中VRRP、VGMP、HRP的区别与协作原理
  • 7个样本在线聚类MATLAB脚本,含详细注释一键运行
  • 承德市2026年黄金回收白银回收铂金回收权威门店 TOP5+正规可靠机构电话与地址汇总 - 马刺总冠军
  • STM32F429搭配LAN8720实现免复位网线热插拔的MODBUS TCP从站
  • MCF547x处理器如何驱动智能加油泵与ATM:嵌入式系统设计实战解析
  • 承德市手表回收包包回收哪家店更好,2026甄选以下5家店铺排名前5 - 谊识预商务