DelayQueue是一个无界的BlockingQueue,用于放置实现了Delayed接口的对象,其中的对象只能在其到期时才能从队列中取走。

下面看个小例子:

import java.util.concurrent.DelayQueue;
import java.util.concurrent.Delayed;
import java.util.concurrent.TimeUnit;public class MyDelayedQueue {public static void main(String[] args) throws InterruptedException {test();}private static void test() throws InterruptedException {DelayQueue<DelayedTask> queue = new DelayQueue<>();producer(queue);System.out.println("start take task from queue");//循环从队列中取数据while (!queue.isEmpty()) {//只有到期的数据才能取的出来,否则就阻塞等待System.out.println(queue.take());}}private static void producer(DelayQueue<DelayedTask> queue) {for (int i = 0; i < 10; i++) {queue.put(new DelayedTask(i * 2000, "delayed task" + i));}}private static class DelayedTask implements Delayed {private long delay;private long expire;private String msg;public DelayedTask(long delay, String msg) {this.delay = delay;this.msg = msg;this.expire = System.currentTimeMillis() + delay;}/*** 用于延迟队列内部进行排序,将最先到期的放在队首,保证take出来的是到期的那个*/@Overridepublic int compareTo(Delayed o) {return (int) (this.getDelay(TimeUnit.MILLISECONDS) - o.getDelay(TimeUnit.MILLISECONDS));}/*** 指定到期时间计算规则*/@Overridepublic long getDelay(TimeUnit unit) {return unit.convert(this.expire - System.currentTimeMillis(), TimeUnit.MILLISECONDS);}@Overridepublic String toString() {return "DelayedTask [delay=" + delay + ", expire=" + expire + ", msg=" + msg + "]";}}
}

Java延时队列DelayedQueue相关推荐

  1. java 延时队列_Java实现简单延迟队列和分布式延迟队列

    在我们的工作中,很多地方使用延迟队列,比如订单到期没有付款取消订单,制订一个提醒的任务等都需要延迟队列,那么我们需要实现延迟队列.我们本文的梗概如下,同学们可以选择性阅读. 1. 实现一个简单的延迟队 ...

  2. 使用Java延时队列DelayQueue实现订单延时处理

    DelayQueue简单介绍 DelayQueue:一个使用优先级队列实现的无界阻塞队列. 支持延时获取的元素的阻塞队列,元素必须要实现Delayed接口. 适用场景:实现自己的缓存系统,订单到期,限 ...

  3. springboot +java延时任务(Delayed)

    问题场景: 订单超时自动取消,类似淘宝或者美团等购买商品时,在用户没有按照规定时间付款时,订单会在指定时间取消. 解决办法: 1.定时任务:该方案通常是在小型项目中使用,即通过一个线程定时的去扫描数据 ...

  4. 【java】6个延时队列的实现方案

    1.概述 转载:6个延时队列的实现方案 [编者的话]个人比较喜欢一些实践类的东西,既学习到知识又能让技术落地,能搞出个demo最好,本来不知道该分享什么主题,好在最近项目紧急招人中,而我有幸做了回面试 ...

  5. java实现基于x-delayed-type的延时队列

    1.使用枚举定义队列 import lombok.Getter;@Getter public enum MessageTaskSendEnum {MESSAGE_TASK_SEND_ENUM(&quo ...

  6. java实现rabbitMQ延时队列详解以及spring-rabbit整合教程

    在实际的业务中我们会遇见生产者产生的消息,不立即消费,而是延时一段时间在消费.RabbitMQ本身没有直接支持延迟队列功能,但是我们可以根据其特性Per-Queue Message TTL和 Dead ...

  7. JAVA中的延时队列DelayQueue

    Java中的延时队列DelayQueue是基于优先队列PriorityQueue实现的. 注:PriorityQueue是基于堆(Heap)实现的.堆(Heap)在本质上是一个数组. Priority ...

  8. java实现延时队列

    延时队列主要应用场景是用户登录后延时推送消息,通知等,一般用mq中间件来弄,下面我来用java实现一.消息实体类实现Delayed接口 import lombok.Data;import java.u ...

  9. redis stream java消息队列_Redis 异步消息队列与延时队列

    消息中间件,大家都会想到 Rabbitmq 和 Kafka 作为消息队列中间件,来给应用程序之间增加异步消息传递功能.这两个中间件都是专业的消息队列中间件,特性之多超出了大多数人的理解能力.但是这种属 ...

最新文章

  1. ERP与EWM集成配置-ERP端组织架构(二)
  2. 七步精通Python机器学习
  3. linux svn 常用命令
  4. Document Builder: 如何分析document template里某个字段未被web service填充的问题
  5. Centos7 +Django的安装
  6. php 转义md5 和java 转译的区别_CTF|PHP中的命令参数注入
  7. C# ToString
  8. 触动精灵 获取外网IP
  9. 第八问:hub 集线器是啥,作用
  10. 数据流通利用 | 数据产权研究综述
  11. 毕业了,开始新的生活!
  12. CAJ如何在线免费转换成可编辑的Word
  13. 一般二阶线性非齐次微分方程的解与对应齐次方程的解的关系
  14. 推荐25种自媒体运营必备工具 (建议收藏)
  15. 【C++】公积金贷款计算器
  16. [python]matplotlib.pyplot模块
  17. 阿里云开放平台微前端方案的沙箱实现
  18. 人工智能的春天来了!Tesra超算网络,助力AI开发!
  19. Codeforces 605E :Intergalaxy Trips
  20. mysql5.0.7中文乱码_PHP+MySQL5.0中文乱码解决方法

热门文章

  1. Android+Jquery Mobile学习系列(8)-保单/生日提醒功能
  2. 【HTML+CSS】(2)CSS Sprite雪碧图
  3. scut AccountServer 使用mysql
  4. JSPServlet精华笔记
  5. Sublime Text 2 快捷键用法大全
  6. linux分区label,label英文什么意思单词讲解(Linux中为一个分区设定label)
  7. R7-2 统计字符[2] (10 分)
  8. VS2019-C++警告-C6385读取数据无效
  9. 3010基于二叉链表的二叉树高度的计算(附思路,WA的一种可能情况及代码)
  10. java程序嵌入地图_java – 使用JPA存储地图