📅  最后修改于: 2023-12-03 15:16:22.743000             🧑  作者: Mango
DelayQueue是Java中的一种队列实现,它可以按照元素的延迟时间进行排序,延迟时间短的元素先被取出。DelayQueue实现了BlockingQueue接口,支持阻塞式数据读写。下面将介绍DelayQueue中的poll()方法及其示例。
DelayQueue中的poll()方法用于获取并删除队列中的头元素,如果队列为空,该方法返回null。由于DelayQueue中的元素已按照延迟时间排好序,因此poll()方法将返回队列中延迟时间最短的元素。
具体语法如下:
public E poll()
其中,E代表队列中的元素类型。
我们可以通过下面的代码示例了解DelayQueue.poll()方法的使用:
import java.util.concurrent.DelayQueue;
import java.util.concurrent.Delayed;
import java.util.concurrent.TimeUnit;
public class DelayQueueExample {
public static void main(String[] args) throws InterruptedException {
// 创建DelayQueue对象
DelayQueue<DelayedElement> delayQueue = new DelayQueue<>();
// 加入元素
delayQueue.put(new DelayedElement("A", 3));
delayQueue.put(new DelayedElement("B", 4));
delayQueue.put(new DelayedElement("C", 2));
// 获取并删除队列头元素
DelayedElement element = delayQueue.poll();
// 输出元素内容
if (element != null) {
System.out.println(element.getContent());
}
}
}
class DelayedElement implements Delayed {
private long delayTime;
private long expireTime;
private String content;
public DelayedElement(String content, long delayTime) {
this.content = content;
this.delayTime = delayTime;
this.expireTime = System.currentTimeMillis() + delayTime * 1000;
}
@Override
public long getDelay(TimeUnit unit) {
long diff = expireTime - System.currentTimeMillis();
return unit.convert(diff, TimeUnit.MILLISECONDS);
}
@Override
public int compareTo(Delayed o) {
long diff = this.expireTime - ((DelayedElement) o).expireTime;
return diff > 0 ? 1 : diff == 0 ? 0 : -1;
}
public String getContent() {
return content;
}
}
运行结果为:
C
在该示例中,我们创建了一个DelayQueue对象,并加入了三个元素。其中,元素A的延迟时间为3秒,元素B的延迟时间为4秒,元素C的延迟时间为2秒。由于元素C的延迟时间最短,因此poll()方法返回元素C,并将其从队列中删除。最后,我们将元素C的内容输出,结果为"C"。
以上就是Java中的DelayQueue.poll()方法及其使用示例。