使用DelayQueue模拟订单自动取消功能
背景:
今天要做一个作业:模拟一个使用DelayQueue的场景。于是我就做一个模拟订单自动取消的功能吧。需求以及实现思路如下:
需求:
1. 生成6个订单,从1号到6号订单,它们的创建时间依次递增3秒。
2. 规定如果一个订单在3秒内状态还是“CREATED”状态,那么就改成“CANCELED”状态。
实现思路:
1. 定义订单类,其实现Delayed接口,为啥要实现这个接口呢?是因为存放到DelayQueue里的元素都要实现Delayed接口,用于判断是否到了超时时间。
2. 在main方法里启动两个线程,第一个线程用来往DelayQueue里添加6个订单,这6个订单的创建时间依次递增3秒。另一个线程是循环从DelayQueue里面获取超时的订单,改成取消状态,然后打印出日志出来。超时的条件是该订单的超时时间字段大于或等于当前系统时间。
代码实现:
先定义一个订单类,实现了Delayed接口:
package top.usjava.learn.springbootlearn.vo;
import java.util.Date;
import java.util.concurrent.Delayed;
import java.util.concurrent.TimeUnit;
/**
* 订单类,用于存放订单头信息
*
* @author Owen
* @date 2018/9/3 14:10
*/
public class Order implements Delayed {
String orderNo;
String receiveName;
int cost;
String status;
Date createTime;
Date cancelTime;
public Order(String orderNo, String receiveName, int cost, String status, Date createTime, Date cancelTime) {
this.orderNo = orderNo;
this.receiveName = receiveName;
this.cost = cost;
this.status = status;
this.createTime = createTime;
this.cancelTime = cancelTime;
}
public String getOrderNo() {
return orderNo;
}
public void setOrderNo(String orderNo) {
this.orderNo = orderNo;
}
public String