【发布时间】:2011-07-19 11:45:23
【问题描述】:
我正在使用延迟队列。我需要使用它以便仅在延迟过去时从队列中取出。我还想强制执行容量,就像 BlockingQueue 一样。我似乎找不到这个的 Collections 实现。一个存在吗?如果没有,实现它的最佳方式是什么?一个基本的方法是做这样的事情:
public void addSomethingToQueue(Object somethingToAdd){
int capacity = 4;
while(queue.size() >= capacity){
try{
wait();
}catch(InterruptedException e){
e.printStackTrace();
}
}
queue.add(somethingToAdd);
}
这意味着每次删除某些内容时都会调用 notify / notifyAll。这是一个相当小的班级,所以这是可行的。不过听起来不太好。而且我不确定等待/通知是否会导致进一步的问题?
将 DelayQueue 子类化并弄乱它的方法会更好吗?感觉有点坑爹……
【问题讨论】:
标签: java collections concurrency