नहीं , हम प्रतीक्षा() . को कॉल नहीं कर सकते विधि ताला प्राप्त किए बिना . जावा में, एक बार लॉक प्राप्त कर लेने के बाद हमें प्रतीक्षा() विधि ( . को कॉल करने की आवश्यकता होती है टाइमआउट के साथ या बिना टाइमआउट के) उस ऑब्जेक्ट पर। अगर हम प्रतीक्षा() . को कॉल करने का प्रयास कर रहे हैं विधि लॉक प्राप्त किए बिना, यह java.lang.IllegalMonitorStateException को फेंक सकता है ।
उदाहरण
public class ThreadStateTest extends Thread { public void run() { try { wait(1000); } catch(InterruptedException ie) { ie.printStackTrace(); } } public static void main(String[] s) { ThreadStateTest test = new ThreadStateTest(); test.start(); } }
उपरोक्त उदाहरण में, हमें प्रतीक्षा() call को कॉल करने की आवश्यकता है लॉक प्राप्त किए बिना विधि इसलिए यह एक IllegalMonitorStateException . उत्पन्न करता है रनटाइम पर। समस्या को ठीक करने के लिए, हमें प्रतीक्षा() . को कॉल करने से पहले लॉक प्राप्त करना होगा विधि और घोषित करें रन() विधि सिंक्रनाइज़ की गई।
आउटपुट
Exception in thread "Thread-0" java.lang.IllegalMonitorStateException at java.lang.Object.wait(Native Method) at ThreadStateTest.run(ThreadStateTest.java:4)