从队列中删除时,我有时会收到 NoSuchElementException
。我需要使用锁/等待/其他一些延迟机制吗?
我提供了代码的粗略翻译。
带队列的线程
public void run(){
while(true){
if(queue.size()>=2){
a = queue.remove();
b = queue.remove();
//DoesSomeWorkHereWhichWorks
//Writes to MVAR's
}
}
写入队列的线程
public void run(){
while(x>0){
//Does something which works
QueueThread.add(this);
//Take from mvars
}
}
非常感谢,请放轻松,我是编程新手:)
最佳答案
如果您的代码片段没问题,则存在问题,因为:
if(queue.size()>=2)
a = queue.remove();
b = queue.remove();
等于写:
if(queue.size()>=2) {
a = queue.remove();
}
b = queue.remove();
<小时/>
关于你的问题,当你有多个线程时,你应该考虑到每条Java语句都会分解为多个子语句,即使是像i++
这样的简单语句。
来自不同线程的子语句可能在程序执行期间交错,如果线程之间存在共享资源(例如您的队列
),结果可能是不可预测的。
您可以找到更多here .
关于从线程的队列中获取时出现 Java 'NoSuchElementException',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35635647/