Java延时队列DelayedQueue
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相关推荐
- java 延时队列_Java实现简单延迟队列和分布式延迟队列
在我们的工作中,很多地方使用延迟队列,比如订单到期没有付款取消订单,制订一个提醒的任务等都需要延迟队列,那么我们需要实现延迟队列.我们本文的梗概如下,同学们可以选择性阅读. 1. 实现一个简单的延迟队 ...
- 使用Java延时队列DelayQueue实现订单延时处理
DelayQueue简单介绍 DelayQueue:一个使用优先级队列实现的无界阻塞队列. 支持延时获取的元素的阻塞队列,元素必须要实现Delayed接口. 适用场景:实现自己的缓存系统,订单到期,限 ...
- springboot +java延时任务(Delayed)
问题场景: 订单超时自动取消,类似淘宝或者美团等购买商品时,在用户没有按照规定时间付款时,订单会在指定时间取消. 解决办法: 1.定时任务:该方案通常是在小型项目中使用,即通过一个线程定时的去扫描数据 ...
- 【java】6个延时队列的实现方案
1.概述 转载:6个延时队列的实现方案 [编者的话]个人比较喜欢一些实践类的东西,既学习到知识又能让技术落地,能搞出个demo最好,本来不知道该分享什么主题,好在最近项目紧急招人中,而我有幸做了回面试 ...
- java实现基于x-delayed-type的延时队列
1.使用枚举定义队列 import lombok.Getter;@Getter public enum MessageTaskSendEnum {MESSAGE_TASK_SEND_ENUM(&quo ...
- java实现rabbitMQ延时队列详解以及spring-rabbit整合教程
在实际的业务中我们会遇见生产者产生的消息,不立即消费,而是延时一段时间在消费.RabbitMQ本身没有直接支持延迟队列功能,但是我们可以根据其特性Per-Queue Message TTL和 Dead ...
- JAVA中的延时队列DelayQueue
Java中的延时队列DelayQueue是基于优先队列PriorityQueue实现的. 注:PriorityQueue是基于堆(Heap)实现的.堆(Heap)在本质上是一个数组. Priority ...
- java实现延时队列
延时队列主要应用场景是用户登录后延时推送消息,通知等,一般用mq中间件来弄,下面我来用java实现一.消息实体类实现Delayed接口 import lombok.Data;import java.u ...
- redis stream java消息队列_Redis 异步消息队列与延时队列
消息中间件,大家都会想到 Rabbitmq 和 Kafka 作为消息队列中间件,来给应用程序之间增加异步消息传递功能.这两个中间件都是专业的消息队列中间件,特性之多超出了大多数人的理解能力.但是这种属 ...
最新文章
- ERP与EWM集成配置-ERP端组织架构(二)
- 七步精通Python机器学习
- linux svn 常用命令
- Document Builder: 如何分析document template里某个字段未被web service填充的问题
- Centos7 +Django的安装
- php 转义md5 和java 转译的区别_CTF|PHP中的命令参数注入
- C# ToString
- 触动精灵 获取外网IP
- 第八问:hub 集线器是啥,作用
- 数据流通利用 | 数据产权研究综述
- 毕业了,开始新的生活!
- CAJ如何在线免费转换成可编辑的Word
- 一般二阶线性非齐次微分方程的解与对应齐次方程的解的关系
- 推荐25种自媒体运营必备工具 (建议收藏)
- 【C++】公积金贷款计算器
- [python]matplotlib.pyplot模块
- 阿里云开放平台微前端方案的沙箱实现
- 人工智能的春天来了!Tesra超算网络,助力AI开发!
- Codeforces 605E :Intergalaxy Trips
- mysql5.0.7中文乱码_PHP+MySQL5.0中文乱码解决方法
热门文章
- Android+Jquery Mobile学习系列(8)-保单/生日提醒功能
- 【HTML+CSS】(2)CSS Sprite雪碧图
- scut AccountServer 使用mysql
- JSPServlet精华笔记
- Sublime Text 2 快捷键用法大全
- linux分区label,label英文什么意思单词讲解(Linux中为一个分区设定label)
- R7-2 统计字符[2] (10 分)
- VS2019-C++警告-C6385读取数据无效
- 3010基于二叉链表的二叉树高度的计算(附思路,WA的一种可能情况及代码)
- java程序嵌入地图_java – 使用JPA存储地图