【发布时间】:2014-08-04 06:11:35
【问题描述】:
我有一个示例程序,我试图从中了解延迟队列。我以特定的延迟向队列提供人员对象,当我尝试在 5 秒的间隔后轮询对象时,我应该得到延迟已过期的所有对象。但相反,我得到 null ,我不明白原因。但是当我将延迟设置为 0 时,此轮询有效。有人可以帮我弄清楚我在下面的示例代码中哪里出错了吗?
public class DelayedQueue {
public static void main(String[] args) {
BlockingQueue<Person> queue = new DelayQueue<Person>();
Person a = new Person("ram", "chennai", 1);
Person b = new Person("nick", "manali", 1);
Person c = new Person("sam", "delhi", 2);
try {
queue.offer(a);
queue.offer(b);
queue.offer(c);
System.out.println(queue.poll(5, TimeUnit.SECONDS));
} catch (InterruptedException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
}
class Person implements Delayed {
private String name;
private String place;
private int runningTime;
public Person(String name, String place, int runningTime) {
this.name = name;
this.place = place;
this.runningTime = runningTime;
}
public long getDelay(TimeUnit timeUnit) {
return timeUnit.convert(this.runningTime, TimeUnit.MILLISECONDS);
@Override
public int compareTo(Delayed person) {
Person b = (Person)person;
return this.name.compareTo(b.name);
}
@Override
public long getDelay(TimeUnit timeUnit) {
return timeUnit.convert(this.runningTime, TimeUnit.MILLISECONDS);
}
}
【问题讨论】:
标签: java polling blockingqueue