📅  最后修改于: 2023-12-03 15:16:22.703000             🧑  作者: Mango
在Java中,DelayQueue是一个无界阻塞队列,其中的元素只能在其延迟期到时才能被取出。DelayQueue常用于实现定时任务调度,比如实现定时执行的任务队列等。DelayQueue提供了一个iterator()
方法,可以用于遍历DelayQueue中的元素。
iterator()
方法返回一个迭代器,用于遍历DelayQueue中的元素。迭代器按照元素的到期时间进行排序,即先遍历最早到期的元素。
下面是一个使用DelayQueue的示例代码:
import java.util.concurrent.*;
public class DelayedTask implements Delayed {
private String name;
private long delayTime;
public DelayedTask(String name, long delayTime) {
this.name = name;
this.delayTime = System.currentTimeMillis() + delayTime;
}
@Override
public long getDelay(TimeUnit unit) {
return unit.convert(delayTime - System.currentTimeMillis(), TimeUnit.MILLISECONDS);
}
@Override
public int compareTo(Delayed o) {
return Long.compare(this.delayTime, ((DelayedTask) o).delayTime);
}
public void execute() {
System.out.println("Task " + name + " executed.");
}
public static void main(String[] args) throws InterruptedException {
DelayQueue<DelayedTask> delayQueue = new DelayQueue<>();
delayQueue.add(new DelayedTask("Task 1", 3000));
delayQueue.add(new DelayedTask("Task 2", 5000));
delayQueue.add(new DelayedTask("Task 3", 2000));
delayQueue.add(new DelayedTask("Task 4", 4000));
Iterator<DelayedTask> iterator = delayQueue.iterator();
while (iterator.hasNext()) {
DelayedTask task = iterator.next();
task.execute();
}
}
}
在上面的示例中,我们创建了一个自定义的实现了Delayed接口的DelayedTask类,用于表示需要被延迟执行的任务。我们创建了一个DelayQueue,并向其中添加了几个DelayedTask对象。然后,我们通过调用iterator()
方法获取到DelayQueue的迭代器,并使用迭代器遍历队列中的元素,并执行它们的execute()方法。
上述示例代码的运行结果如下:
Task 3 executed.
Task 1 executed.
Task 4 executed.
Task 2 executed.
可以看到,迭代器按照元素的到期时间进行了排序,先执行延迟时间较短的任务。
希望这个介绍对你理解Java中的DelayQueue的iterator()方法及其示例有所帮助!