gpt4 book ai didi

从线程的队列中获取时出现 Java 'NoSuchElementException'

转载 作者:行者123 更新时间:2023-12-02 03:54:14 28 4
gpt4 key购买 nike

从队列中删除时,我有时会收到 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/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com