DelayQueue是用于可被延迟操作的队列,在ScheduledThreadPoolExecutor中使用..经常用来设计"定时消费"的队列,即提供了对queue中成员按照"过期"时间排序能力,从queue中获取的成员必将是离超时最近的;此外DelayQueue是支持并发的,它内部实现非常简单:ReentrantLock + PriorityQueue;
如下为自己测试类.
public class DelayQueueTest {
/**
* @param args
*/
public static void main(String[] args) {
DelayQueue<DelayedItem> queue = new DelayQueue<DelayedItem>();
for(int i = 0; i<5; i++){
queue.add(new DelayedItem(System.currentTimeMillis() - i * 1000));
}
DelayedItem item = null;
while((item = queue.peek()) != null){
System.out.println("...." + item.getTime());
if(item.getDelay(TimeUnit.MILLISECONDS) <= 0){
queue.poll();
}
}
System.out.println("End,queue size is :" + queue.size());
}
public static class DelayedItem implements Delayed{
private long time;
DelayedItem(long time){
this.time = time;
}
public long getTime() {
return time;
}
@Override
public long getDelay(TimeUnit unit) {
return unit.convert(time - System.currentTimeMillis(),TimeUnit.MILLISECONDS);
}
@Override
public int compareTo(Delayed o) {
if(o instanceof DelayedItem){
DelayedItem di = (DelayedItem)o;
if(time > di.getTime()){
return 1;
}else if(time == di.getTime()){
return 0;
}else{
return -1;
}
}
throw new RuntimeException("State Error!");
}
}
}
本文介绍了 Java 中 DelayQueue 的工作原理与实现细节,并通过一个简单的测试类演示了如何使用 DelayQueue 来创建一个按过期时间排序的队列。DelayQueue 是一种支持并发操作的特殊队列,常用于实现定时任务或延迟消费的功能。
1257

被折叠的 条评论
为什么被折叠?



