你能告诉我在什么情况下这段代码会抛出 java.util.NoSuchElementException 吗:
public class StackTest {
private LinkedList<Object> myList = new LinkedList<Object>();
public StackTest() {
Thread testStack = new Thread() {
@Override
public void run() {
while (true)
{
synchronized (myList)
{
try {
if (myList.size() == 0)
{
myList.wait();
}
Object elem = myList.removeLast();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
};
testStack.start();
}
public void enQueue(Object o)
{
synchronized(myList)
{
myList.addFirst(o);
myList.notifyAll();
}
}
}
我的循环总是在等待 enqueue 方法在添加元素后调用 notifyAll。但有时,我在调用 myList.removeLast()
最佳答案
你应该坚持 the recommended pattern并将您的条件放在 while
中以避免虚假唤醒。
synchronized (myList) {
try {
while (myList.size() == 0) {
myList.wait();
}
Object elem = myList.removeLast();
} catch (Exception e) {
e.printStackTrace();
}
}
关于java - 随机 java.util.NoSuchElementException 即使使用 wait(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44258805/