队列操作:
/** * Created by yl on 2017/7/10. */ public class MessageDelayQueue { private MessageDelayQueue(){ } private static DelayQueue<Message> queue = new DelayQueue<Message>(); /*新增延时队列*/ public static void addMessage(Message msg){ queue.offer(msg); } /*移除延时队列*/ public static void rmMessage(Message msg){ queue.remove(msg); } public static DelayQueue<Message> getQueue() { return queue; } public static void setQueue(DelayQueue<Message> queue) { MessageDelayQueue.queue = queue; } }线程执行类
/** * Created by yl on 2017/7/10. */ public class DelayQueueThread implements Runnable { @Override public void run() { while(true) { try { Message take = MessageDelayQueue.getQueue().take(); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); System.out.println(String.format("消息执行,msg:[%s],id:[%s],执行时间:[%s]", take.getMsg(), take.getId(), sdf.format(take.getExcuteTime()))); } catch (InterruptedException e) { e.printStackTrace(); } } } }测试类
public class Test { public static void main(String[] args) { MessageDelayQueue.addMessage(new Message(1,"消息1",getTime(15000))); MessageDelayQueue.addMessage(new Message(2,"消息2",getTime(30000))); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); System.out.println(String.format("启动延时任务[%s]",sdf.format(System.currentTimeMillis()))); new Thread(new DelayQueueThread()).start(); MessageDelayQueue.addMessage(new Message(3,"消息3",getTime(70000))); MessageDelayQueue.addMessage(new Message(4,"消息4",getTime(45000))); } public static long getTime(int s){ return new Date().getTime() + s; } }最终结果分别15、30、45、70秒后执行:
启动延时任务[2017-07-10 13:43:04] 消息执行,msg:[消息1],id:[1],执行时间:[2017-07-10 13:43:19] 消息执行,msg:[消息2],id:[2],执行时间:[2017-07-10 13:43:34] 消息执行,msg:[消息4],id:[4],执行时间:[2017-07-10 13:43:49] 消息执行,msg:[消息3],id:[3],执行时间:[2017-07-10 13:44:14]