Springboot使用DelayQueue实现订单自动取消

DelayQueue小结

  • DelayQueue是一个有序的无界BlockingQueue,用于放置实现了Delayed接口的对象,其中的对象在到期时才能从队列中取走。
  • DelayQueue只能添加实现了Delayed接口的对象,不能将null元素放置到这种队列中。

BlockingQueue中add,offer,put方法区别

  • add
    将指定的元素插入到此队列中,在成功时返回 true,如果当前没有可用空间,则抛出 IllegalStateException,该方式为非阻塞添加。
  • offer
    将指定元素插入到此队列的尾部(如果立即可行且不会超出此队列的容量),在成功时返回 true,如果此队列已满,则返回 false,此方法通常要优于 add 方法,该方式为非阻塞添加。
  • put
    将指定元素插入到此队列的尾部,该方式为阻塞添加,则等待空间变得可用。

代码实现

初始化一个延迟队列DelayQueue

/**
 * 定义一个延迟队列
 *
 * @author zengwei
 * @email 1014483974@qq.com
 */
public volatile static DelayQueue<Orders> orderQueue = new DelayQueue();

在订单类中,实现Delayed接口

/**
 * 订单实体类
 *
 * @author zengwei
 * @email 1014483974@qq.com
 */
@Entity
@Data
@Builder(toBuilder = true)
@EqualsAndHashCode(callSuper = false)
public class Orders implements Delayed {
   

	@ApiModelProperty(value = "订单编号")
    private String orderNumber;

    @ApiModelProperty(value = "订单自动关闭时间,DelayQueue使用")
    private Date time;

    @Override
    public long getDelay(TimeUnit unit) {
   <
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值