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) {
<