从队列中删除时,我有时会获得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
}
}
非常感谢,请放轻松我,我是编程的新手:)
答案 0 :(得分:2)
如果您的代码段正常,则会出现问题,因为:
if(queue.size()>=2)
a = queue.remove();
b = queue.remove();
等于写作:
if(queue.size()>=2) {
a = queue.remove();
}
b = queue.remove();
关于你的问题,当你有多个线程时,你应该考虑到每个Java语句在多个子语句中被分解,甚至是像i++
这样的简单语句。
来自不同线程的子语句可能在程序执行期间交错,如果线程之间存在共享资源(如queue
),则结果可能无法预测。
您可以找到更多here。