के लिए मॉनीटर प्राप्त करने में विफल क्यों ऐसा हो सकता है?java.lang.IllegalMonitorStateException: (m = 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();
लाइन में होता है।
क्या आप हमें बता सकते हैं कि स्रोत कोड में 474 कौन सी रेखा है? – flybywire
अपवाद उपलब्ध है। Wait(); लाइन, लेकिन लाइन 474 java.lang.Object वर्ग से है। –