在生成器和使用者数量访问同步Queue
之后,它被同步但在从队列中提取元素时仍然给出java.util.NoSuchElementException
。它有什么问题以及如何解决它。
public class Que{
private Queue queue = new LinkedList();
public synchronized void enqueue(Runnable r) {
queue.add(r);
notifyAll();
}
public synchronized Object dequeue(){
Object object = null;
try{
while(queue.isEmpty()){
wait();
}
} catch (InterruptedException ie) {
}
object = (Object)queue.remove();// This line is generating exception
return object;
}
}
答案 0 :(得分:0)
我发现了问题,我也解决了。 发生了InterruptedException并且需要在catch语句中恢复中断状态,还需要按如下方式返回。
public class Que{
private Queue queue = new LinkedList();
public synchronized void enqueue(Runnable e) {
queue.add(e);
notifyAll();
}
public synchronized Object dequeue(){
Object object = null;
try{
while(queue.isEmpty()){
wait();
}
} catch (InterruptedException ie) {
Thread.currentThread().interrupt();//restore the status
return ie;//return InterruptedException object
}
object = (Object)queue.remove();// This line is generating exception
return object;
}
}