"यदि कोई कर्मचारी अपना काम अच्छी तरह से करना चाहता है, तो उसे पहले अपने औजारों को तेज करना होगा।" - कन्फ्यूशियस, "द एनालेक्ट्स ऑफ कन्फ्यूशियस। लू लिंगगोंग"
मुखपृष्ठ > प्रोग्रामिंग > Java\'s wait and Notify का उपयोग करते समय मुझे IllegalMonitorStateException क्यों मिल रही है?

Java\'s wait and Notify का उपयोग करते समय मुझे IllegalMonitorStateException क्यों मिल रही है?

2024-11-14 को प्रकाशित
ब्राउज़ करें:581

Why Am I Getting IllegalMonitorStateException When Using Java\'s Wait and Notify?

जावा की प्रतीक्षा करें और सूचित करें: IllegalMonitorStateException को समझना

जावा में, प्रतीक्षा करें और सूचित करें विधियां थ्रेड्स को उनके निष्पादन को सिंक्रनाइज़ करने की अनुमति देती हैं। हालाँकि, इन तरीकों का गलत तरीके से उपयोग करने से IllegalMonitorStateException हो सकता है। ]कन्स्ट्रक्टर में, मुख्य थ्रेड कई थ्रेड बनाता है और उन्हें एक ArrayList में जोड़ता है।

के बाद "रनर्स रेडी" प्रिंट करते हुए, यह सभी थ्रेड्स को सूचित करने के लिए notifyAll() को कॉल करता है।

Runner.java

  • रन() विधि में, प्रत्येक धावक प्रतीक्षा() स्थिति में प्रवेश करता है, मुख्य थ्रेड से अधिसूचना की प्रतीक्षा करता है।
समस्या प्रतीक्षा() कॉल में निहित है रनर.रन()। जब कोई थ्रेड किसी ऑब्जेक्ट पर wait() कॉल करता है, तो उसके पास उस ऑब्जेक्ट का मॉनिटर होना चाहिए। ऑब्जेक्ट पर सिंक्रोनाइज़ करके स्वामित्व स्थापित किया जाता है।

समस्या को ठीक करने के लिए, wait() कॉल के भीतर Main.main पर सिंक्रोनाइज़ करें:

    क्लास रनर रननेबल लागू करता है { सार्वजनिक शून्य रन() { कोशिश { सिंक्रनाइज़ (मुख्य.मुख्य) { मुख्य.मुख्य.प्रतीक्षा(); } } पकड़ें (बाधित अपवाद ई) {} System.out.println('धावक दूर!'); } }
  • यह सुनिश्चित करता है कि वर्तमान थ्रेड wait() स्थिति में प्रवेश करने से पहले Main.main के मॉनिटर का मालिक है।

Notify() और NotifyAll() पर भी यही सिद्धांत लागू होता है। इन विधियों को जारी करने से पहले एक थ्रेड के पास ऑब्जेक्ट का मॉनिटर होना चाहिए।

नवीनतम ट्यूटोरियल अधिक>

चीनी भाषा का अध्ययन करें

अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।

Copyright© 2022 湘ICP备2022001581号-3