应用场景 :
用户购票后,产生未支付订单,系统30分钟后未支付自动取消。(每个订单放入线程中设置超时时间,自动处理)
本文 用一个线程 来循环跑对列,取消队列中的数据!!!
业务实现思路:
用户下单时,把当前订单放入队列中 设置过期时间,
知识回顾:
队列(Queue):(https://blog.csdn.net/zhongguozhichuang/article/details/53196415)
BlockingQueue(组塞线程):https://www.cnblogs.com/KingIceMou/p/8075343.html
ExecutorService(线程池):点击打开链接
本文对线程的基本概念也需要理解!
// =========================================准备工作
DelayQueue: 准备前缀 创建队列对象 点击打开链接 (https://blog.csdn.net/u012859681/article/details/77836139)
/**
* 实现 Delayed 类 重写 方法
*/
public class OrderItem implements Delayed {
private final long delayTime; // 延迟时间
private final long expire; // 到期时间
private Object data; // 数据
public OrderItem(){
delayTime=0;
expire=0;
}
public OrderItem(long delay, Object data) {
delayTime = delay;
this.data = data;
expire = System.currentTimeMillis() + delay;
}
/**
* 优先队列里面优先级规则 TimeUnit .MILLISECONDS 获取单位 为毫秒的时间戳
*/
@Override
public int compareTo(Delayed o) {
return (int)