Java并发工具包——BlockingQueue(二)
上期讨论了一个简单的队列,使用队列做了一个生产者消费者小例子。这期分享另一个很有意思的队列:延迟队列。
DelayQueue
简介
延迟队列就是通过入队时的设定决定出队的时间。
所以理解起来应该非常简单,不用过多介绍
应用场景
有一种应用场景
- 根据当前执行任务的时间来决定多久之后执行一个异步任务
应该有朋友说为什么不使用定时器去做这种任务呢?
其实这个场景特殊的地方就在于开始时间不确定导致了执行任务的时间也不确定,那么使用延迟队列去解决是一个非常好的解决方案。
实例
实现一个延迟队列,延迟消息
通过设定时间完成初始化消息,并且开启两个线程去生产消费延迟消息
输出结果,可以看出从入队到出队的时间正好在五秒左右
总结
延迟队列在实际应用场景中,不是特别的丰富,不过解决一些特别的场景是非常好用的。
对于JDK提供的DelayQueue提供实现,我们需要自己完成队列中的消息的实现,也就说我们需要实现Delayed接口,完成getDelay和compareTo方法的具体实现。这样才能正常使用DelayQueue的延迟特性。
常见面试题
- 如何实现一个延迟队列
- 使用DelayQueue需要做什么准备工作
- Delayed接口的实现需要注意什么