- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我们有生产者消费者的实现。有时我们会在 readRecord() 方法中遇到 NoSuchElementException。理想情况下,这种情况不应该发生,因为有一个 if 语句,并且该方法是同步的,这确保在任何时间点只有一个线程被执行。但我们仍然得到 NoSuchElementException。有人可以指导我这个吗?
import java.util.LinkedList;
public class Listner{
private LinkedList<Object> objList = new LinkedList<Object>();
private Object listLock = new Object();
public void writeRecord(Object obj){
synchronized(listLock) {
objList.add(obj);
}
}
public synchronized Object readRecord(){
Object obj = null;
if( !objList.isEmpty() )
obj = objList.removeFirst();
return obj;
}
}
最佳答案
您的 readRecord
是同步的,因此一次最多可以有一个 readRecord
,但是没有什么可以阻止 readRecord
和 writeRecord
并发运行,因为它们锁定不同的对象。如果碰巧 writeRecord
正在添加记录,则 isEmpty
返回 false,但 removeFirst
无法找到该元素,因为 writeRecord
尚未完成添加,您会收到该异常。
在 readRecord
中对 listLock
进行同步,或者删除 listLock
并将这两个方法声明为同步来修复它。
关于Java 生产者/消费者并发问题 - 尝试读取对象时出现 NoSuchElementFound 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59942497/
我试图让扫描仪读取文本文件的输入,将该输入放入一个字符串中,有一个该字符串的 StringTokenizer,然后有一个 String[],该数组的每个元素都是该 StringTokenizer 的标
我编写了姓名排序程序,旨在对姓名列表进行排序(废话)并给出我姓名的索引值。由于某种原因,它编译得很好,但说“maleNames[i] = nameScan.nextLine();”有问题,并返回以下消
我的任务是计算从文件中读取的表达式,例如 (4-7)/2+6分别表示最小值和最大值,优先级高于/和*。 但是,在尝试计算表达式时,我遇到了 NoSuchElementFound 异常,该异常指向我
我编写了一个程序来模拟逻辑门操作。我的代码如下, import java.io.*; import java.util.Scanner; // This program simulates the l
我们有生产者消费者的实现。有时我们会在 readRecord() 方法中遇到 NoSuchElementException。理想情况下,这种情况不应该发生,因为有一个 if 语句,并且该方法是同步的,
我是一名优秀的程序员,十分优秀!