订单队列处理及按时间队列处理

上传人:豆浆 文档编号:10598201 上传时间:2017-10-09 格式:DOC 页数:6 大小:41KB
返回 下载 相关 举报
订单队列处理及按时间队列处理_第1页
第1页 / 共6页
订单队列处理及按时间队列处理_第2页
第2页 / 共6页
订单队列处理及按时间队列处理_第3页
第3页 / 共6页
订单队列处理及按时间队列处理_第4页
第4页 / 共6页
订单队列处理及按时间队列处理_第5页
第5页 / 共6页
点击查看更多>>
资源描述

《订单队列处理及按时间队列处理》由会员分享,可在线阅读,更多相关《订单队列处理及按时间队列处理(6页珍藏版)》请在金锄头文库上搜索。

1、|||||www.orz123.org前段时间一同事在做一个订单的自动取消功能,他是用一个 timertask 做的,每个多少分钟自动跑一次,我觉得那样不大好,多浪费资源的,然后就参考游戏的一个技能冷却做了一个简单的例子,我技术有限,欢迎大家拍砖指点下。流程是:下单成功后,24 小时未付款自动取消订单。处理流程:当下单成功,将当前订单的相关属性添加到队列,然后一个线程不断的轮询当前队列中是否有需要取消的订单。然后可以根据订单编号来取消当前队列中的数据。好了。直接上代码:queue 类:import java.util.LinkedList;/* 队列数据* author 小俊不乖*/publi

2、c class Queue /* 订单数据队列*/private LinkedList orderQueue = new LinkedList();/* 添加一个数据到队列* param orderPOJO*/public synchronized void addQueue(OrderPOJO orderPOJO)orderQueue.add(orderPOJO);/* 获取队列中最后一个对象*/SuppressWarnings(unchecked)|||||www.orz123.orgpublic T getQueueLastObject()return (T)orderQueue.pee

3、kFirst();/* 根据订单编号移除一个已存在队列中的数据* param orderNo*/public synchronized void removeObjectByOrderNo(String orderNo)OrderPOJO orderPOJO = new OrderPOJO();orderPOJO.setOrderNo(orderNo);int index = orderQueue.indexOf(orderPOJO);orderQueue.remove(index);orderPojo 类:import java.io.Serializable;import java.uti

4、l.Date;/* 数据实体* author 小俊不乖*/public class OrderPOJO implements Serializableprivate static final long serialVersionUID = 8126155000510758759L;private String orderNo; /订单编号private Date createTime; /下单时间public OrderPOJO() |||||www.orz123.orgpublic String getOrderNo() return orderNo;public void setOrder

5、No(String orderNo) this.orderNo = orderNo;public Date getCreateTime() return createTime;public void setCreateTime(Date createTime) this.createTime = createTime;Overridepublic boolean equals(Object obj) OrderPOJO orderPOJO = (OrderPOJO)obj;return this.orderNo.equals(orderPOJO.getOrderNo();测试类:import

6、java.text.DateFormat;import java.text.SimpleDateFormat;import java.util.Calendar;import java.util.Date;public class Test |||||www.orz123.org/* param args*/public static void main(String args) final Queue queue = new Queue();OrderPOJO orderPOJO1 = new OrderPOJO();Date time = new Date();Calendar calen

7、dar = Calendar.getInstance();calendar.setTime(time);calendar.add(Calendar.SECOND, 10);orderPOJO1.setOrderNo(1);orderPOJO1.setCreateTime(calendar.getTime();OrderPOJO orderPOJO2 = new OrderPOJO();orderPOJO2.setOrderNo(2);calendar.add(Calendar.SECOND, 20);orderPOJO2.setCreateTime(calendar.getTime();que

8、ue.addQueue(orderPOJO1);queue.addQueue(orderPOJO2);Thread t = new Thread(new Runnable() Overridepublic void run() while(true)OrderPOJO orderPOJO = queue.getQueueLastObject();if(orderPOJO = null)System.out.println(没得,数据了,等待加入数据);Thread.currentThread().suspend();continue;long time = orderPOJO.getCreat

9、eTime().getTime() - System.currentTimeMillis();System.out.println(订单编号: + orderPOJO.getOrderNo() + ,到期时间: + |||||www.orz123.orgnew SimpleDateFormat(yyyy-MM-dd HH:mm:ss).format(orderPOJO.getCreateTime().getTime()+ ,当前线程需要睡眠 + time + 毫秒);if(time 1)System.out.println(当前可以执行的数据订单编号: + orderPOJO.getOrder

10、No();queue.removeObjectByOrderNo(orderPOJO.getOrderNo();elsetry Thread.sleep(time); catch (InterruptedException e) e.printStackTrace(););t.setName(执行队列的后台线程);t.start();long l = 40*1000;try Thread.currentThread().sleep(l); catch (InterruptedException e) e.printStackTrace();OrderPOJO orderPOJO3 = new OrderPOJO();orderPOJO3.setOrderNo(3);calendar.add(Calendar.SECOND, 30);orderPOJO3.setCreateTime(calendar.getTime();System.out.println(加入数据,开始执行);queue.addQueue(orderPOJO3);t.resume();|||||www.orz123.org

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号