delayQueue延时队列-模拟简易MQ
来源:互联网 发布:游族网络股票 编辑:程序博客网 时间:2024/06/08 20:02
package delayQueue;/* * Copyright (c) 2017 UCSMY. * All rights reserved. * Created on 2017/9/25 * Contributors: * - initial implementation */import java.util.concurrent.DelayQueue;/** * 利用DelayQueue实现延时消息队列(简易版MQ) * * @author moss * @since 2017/9/25 */public class Producer implements Runnable{ private DelayQueue<Message> queue; public Producer(DelayQueue<Message> queue){ this.queue = queue; } @Override public void run() { //5秒后发送消息 Message m2 = new Message("2","Tom",5000); queue.offer(m2); System.out.println("消息生产者往消息队列放置消息:"+m2.getId()+":"+m2.getName()); //3秒后发送消息 Message m1 = new Message("1","Tom",3000); queue.offer(m1); System.out.println("消息生产者往消息队列放置消息:"+m1.getId()+":"+m1.getName()); }}
package delayQueue;/* * Copyright (c) 2017 UCSMY. * All rights reserved. * Created on 2017/9/25 * Contributors: * - initial implementation */import java.util.concurrent.DelayQueue;/** * 暂无描述 * * @author moss * @since 2017/9/25 */public class Consumer implements Runnable{ private DelayQueue<Message> queue; public Consumer(DelayQueue<Message> queue){ this.queue = queue; } @Override public void run() { while(true){ try { Message take = queue.take(); System.out.println("消息需求者获取消息:"+take.getId()+":"+take.getName()); } catch (InterruptedException e) { e.printStackTrace(); } } } }package delayQueue;/* * Copyright (c) 2017 UCSMY. * All rights reserved. * Created on 2017/9/25 * Contributors: * - initial implementation */import java.util.concurrent.Delayed;import java.util.concurrent.TimeUnit;/** * * 1)2个小时后给用户发送短信。 2)15分钟后关闭网络连接。 3)2分钟后再次尝试回调。 * * @author ucs_gaokuixin * @since 2017/9/25 */public class Message implements Delayed { private String id; private String name; private long activeTime;//执行时间 public Message(){ } public Message(String id, String name,long activeTime) { super(); this.id = id; this.name = name; this.activeTime = TimeUnit.NANOSECONDS.convert(activeTime, TimeUnit.MILLISECONDS) + System.nanoTime(); } public String getId() { return id; } public void setId(String id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } @Override public long getDelay(TimeUnit unit) { return unit.convert(this.activeTime - System.nanoTime(), TimeUnit.NANOSECONDS); } @Override public int compareTo(Delayed o) { Message msg = (Message)o; return Integer.valueOf(this.id)>Integer.valueOf(msg.id)?1:( Integer.valueOf(this.id)<Integer.valueOf(msg.id)?-1:0); }}package delayQueue;/* * Copyright (c) 2017 UCSMY. * All rights reserved. * Created on 2017/9/25 * Contributors: * - initial implementation */import java.util.concurrent.DelayQueue;/** * 暂无描述 * * @author moss * @since 2017/9/25 */public class DelayQueueTest { public static void main(String[] args) { DelayQueue<Message> queue = new DelayQueue<Message>(); new Thread(new Producer(queue)).start(); new Thread(new Consumer(queue)).start(); }}消息生产者往消息队列放置消息:2:Tom
消息生产者往消息队列放置消息:1:Tom
消息需求者获取消息:1:Tom
消息需求者获取消息:2:Tom
阅读全文
0 0
- delayQueue延时队列-模拟简易MQ
- 利用DelayQueue实现延时消息队列(简易版MQ)
- 利用DelayQueue实现延时消息队列(简易版MQ)
- 利用DelayQueue实现延时消息队列(简易版MQ)
- DelayQueue延时队列的使用
- DelayQueue延时队列的使用
- DelayQueue延时队列操作实例
- 进阶篇:延时队列之DelayQueue(十四)
- DelayQueue 实现延时消息队列实践
- DelayQueue 队列
- DelayQueue 队列
- DelayQueue 队列
- DelayQueue 队列
- DelayQueue 队列
- Java多线程/并发27、DelayQueue延迟队列模拟实现Session
- DelayQueue队列研究
- DelayQueue队列研究
- 延迟队列DelayQueue
- Android学习笔记(二十四):导入包后导致的包冲突问题
- 基于backbone开发的一些流程
- OFDM中保护间隔和循环前缀抵抗ISI和ICI
- Python:dataframe.to_sql和dataframe.read_sql
- HDU 3047 Zjnu Stadium 带权并查集
- delayQueue延时队列-模拟简易MQ
- park,clark和ipark浅析
- 日常英语口语1000句
- 如何绕过chrome的弹窗拦截机制
- 怎样在ABBYY PDF Transformer+中添加注释
- vue 安装教程(自己安装过程及遇到的一些坑)
- java爬虫,破解JS加密的Cookie
- 调用函数用指针改变一个变量的值
- Druid使用起步—在javaWeb项目中配置监控