DelayQueue是Java中线程安全、无界、阻塞式的延时队列,基于PriorityQueue按到期时间排序,依赖Delayed接口实现延迟控制,适用于缓存清理、会话超时等轻量定时场景。
DelayQueue 是 Java 并发包(java.util.concurrent)中一个**线程安全、无界、阻塞式**的延时队列,专门用来存放实现了 Delayed 接口的元素。它的核心特点是:元素只有在指定的延迟时间到期后,才能被取出来 —— 没到期,就“卡”在队列里,谁也拿不走。
DelayQueue 内部用 PriorityQueue(优先级队列) 存储元素,并按元素的到期时间排序,队首永远是**剩余延迟最短、最先到期**的那个。它还配合 ReentrantLock 和 Condition 实现线程安全与阻塞等待,支持多线程并发操作。
因为 DelayQueue 只认这一种“身份证”。实现 Delayed 需要重写两个方法:
不是所有定时需求都得上 Quartz 或 XXL-JOB,轻量级场景下 DelayQueue 很趁手:
它好用但不是万能胶:
远期任务,调用线程会一直等;基本上就这些。它小而精,适合嵌入式、中间件或自研框架中做精准延时控制,不复杂但容易忽略细节。