PriorityBlockingQueue
PriorityBlockingQueue是一个支持优先级的无界阻塞队列。默认情况下元素采取自然顺序升序排列,也可以实现compareTo()
方法来指定元素排序规则,或者初始化PriorityBlockingQueue时,指定构造参数Comparator来对元素进行排序。需要注意的是不能保证同优先级元素的顺序。
DelayQueue
DelayQueue是一个支持延时获取元素的无界阻塞队列。队列使用PriorityQueue来实现。队列中的元素必须实现Delayed接口,在创建元素时,可以指定多久才能从队列中获取当前元素。只有在延迟期满的时候才能从队列中提取元素。
DelayQueue的应用场景:
- 缓存系统的设计:可以使用DelayQueue保存缓存元素的有效期,使用一个线程轮询DelayQueue,一旦能够从DelayQueue中获取到元素时,表示缓存有效期到了
- 定时任务调度:使用DelayQueue保存当天将会执行的任务和执行时间,一旦从DelayQueue中获取到任务就开始执行,比如TimerQueue就是使用DelayQueue实现的。