请给我一个 java 延时对列 的实例
时间: 2024-05-01 07:17:36 浏览: 75
老板让我设计一个合适的延时队列.zip
好的,下面是一个简单的 Java 延时队列实例:
```
import java.util.concurrent.DelayQueue;
import java.util.concurrent.Delayed;
import java.util.concurrent.TimeUnit;
public class DelayQueueExample {
public static void main(String[] args) {
DelayQueue<DelayedElement> delayQueue = new DelayQueue<>();
DelayedElement element1 = new DelayedElement("element1", 3000);
DelayedElement element2 = new DelayedElement("element2", 5000);
DelayedElement element3 = new DelayedElement("element3", 1000);
delayQueue.offer(element1);
delayQueue.offer(element2);
delayQueue.offer(element3);
while (!delayQueue.isEmpty()) {
try {
DelayedElement element = delayQueue.take();
System.out.println(element.getName() + " consumed after " + element.getDelay(TimeUnit.MILLISECONDS) + " milliseconds.");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
static class DelayedElement implements Delayed {
private String name;
private long startTime;
public DelayedElement(String name, long delay) {
this.name = name;
this.startTime = System.currentTimeMillis() + delay;
}
@Override
public long getDelay(TimeUnit unit) {
long diff = startTime - System.currentTimeMillis();
return unit.convert(diff, TimeUnit.MILLISECONDS);
}
@Override
public int compareTo(Delayed o) {
if (this.startTime < ((DelayedElement) o).startTime) {
return -1;
}
if (this.startTime > ((DelayedElement) o).startTime) {
return 1;
}
return 0;
}
public String getName() {
return name;
}
}
}
```
以上就是一个简单的 Java 延迟队列实例,其中 `DelayedElement` 实现了 `Delayed` 接口,重写了 `getDelay()` 和 `compareTo()` 方法,而在 `main` 方法中,我们创建了三个不同延时的 `DelayedElement` 对象,并添加到了 `DelayQueue` 中,通过 take 方法实现了阻塞并在延迟时间到达后进行消费。
阅读全文