为什么会发生这种情况?事实是,监视器对象肯定不是null,但仍然经常会遇到此异常:
java.lang.IllegalMonitorStateException: (m=null) Failed to get monitor for (tIdx=60)
at java.lang.Object.wait(Object.java:474)
at ...
引发此问题的代码是一个简单的池解决方案:
public Object takeObject() {
Object obj = internalTakeObject();
while (obj == null) {
try {
available.wait();
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
obj = internalTakeObject();
}
return obj;
}
private Object internalTakeObject() {
Object obj = null;
synchronized (available) {
if (available.size() > 0) {
obj = available.keySet().iterator().next();
available.remove(obj);
synchronized (taken) {
taken.put(obj, Boolean.valueOf(true));
}
}
}
return obj;
}
public void returnObject(Object obj) {
synchronized (taken) {
taken.remove(obj);
}
synchronized (available) {
if (available.size() < size) {
available.put(obj, Boolean.valueOf(true));
available.notify();
}
}
}
我想念什么吗?
编辑 :例外发生available.wait();
在行中。
请参阅javadoc中的Object.wait。
特别是“当前线程必须拥有该对象的监视器。” 和“ [throws] IllegalMonitorStateException-
如果当前线程不是对象监视器的所有者。” 也就是说,您需要在要调用的对象上进行同步。
因此您的代码应为:
synchronized (available) {
available.wait();
}
我收到一个错误。当我在谷歌上搜索时,我得到了一些结果,但它们都是针对Android编程的。我使用Windows,Java1.8和Selenium自动测试。 错误 我的原始代码(我没有写,但正在调试,并已工作): 我得到的错误是“没有这样的窗口”。所以我想我可能需要等到窗口数量稳定下来,所以我在点击后和执行windows操作之前添加了以下内容: 正是在这一点上,它进行切换,我得到了 正如我之前提到的
我们使用nextjs/reactjs作为FE,并且我们有一个server.js文件,它允许我们在上传映像,但是由于某种原因,每当我们运行服务器时,都会出现错误 下面是我们在server.js上的代码 这些是我们package.json中包含的脚本 希望得到一些答案和建议。这些代码在本地运行,没有任何问题
我正在使用Android Studio。我需要在SQLite中存储数据,但我无法打开Android设备监视器。 错误消息: 检查1473682358409.log。 1473682358409.日志: 消息应用程序错误!STACK 1 Java . io . file not found exception:C:\ Users \ username . Android \ monitor-work
!Entry org.eclipse.osgi 4 0 201 5-01-05 04:00:15.930!Message Bundle Reference:File:org.apache.ant_1.8.3.v201301120609/@4找不到。 !Entry org.eclipse.osgi 4 0 201 5-01-05 04:00:15.934!Message Bundle Referen
问题内容: 我收到以下错误 未捕获的TypeError:无法读取null的属性’appendChild’ myRequest.onreadystatechange @ script.js:20 与我下面的代码 这是我的JavaScript文件 这是内容 这是一个简单文本文件的内容。 我在这里按照@Tejs的建议将脚本标签放在html的底部,但仍然出现此错误。 问题答案: 执行回调时,页面上没有ID