在使用延迟队列之前,大多数用到定时执行的功能都是用任务调度来做的,但是当碰到类似订餐业务/购物等这种业务就不好处理了,比如购物的订单功能,在你的订单管理中有N个订单,当订单超过十分钟未支付的时候自动释放购物篮中的商品,订单失效。这种高频率的延迟任务再来用任务调度(定时)实现就得不偿失了。
推荐使用java 延迟队里来实现:
前提先了解线程,队列。
DelayQueue是java.util.concurrent中提供的一个类。
了解DelayQueue
DelayQueue是什么?
DelayQueue是一个无界的BlockingQueue,用于放置实现了Delayed接口的对象,其中的对象只能在其到期时才能从队列中取走。这种队列是有序的,即队头对象的延迟到期时间最长。注意:不能将null元素放置到这种队列中。
DelayQueue能做什么?
在我们的业务中通常会有一些需求是这样的:
1. 淘宝订单业务:下单之后如果三十分钟之内没有付款就自动取消订单
。
2. 饿了吗订餐通知:下单成功后60s之后给用户发送短信通知
。
那么这类业务我们可以总结出一个特点:需要延迟工作。
由此的情况,就是我们的DelayQueue应用需求的产生。