ไม่สามารถ เรา ไม่สามารถเรียก wait() โดยไม่ได้ lock ก่อนหน้า ใน Java หลังจากได้ lock แล้วจึงต้องเรียก wait() method (มี timeout หรือไม่มี) บนออบเจ็กต์นั้น หากพยายามเรียก wait() โดยไม่ได้ lock จะโยน 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();
}
}
ในตัวอย่าง เรียก wait() โดยไม่ได้ lock ก่อน ทำให้เกิด IllegalMonitorStateException ตอนรันไทม์ เพื่อแก้ไข ต้องได้ lock ก่อนเรียก wait() และประกาศ run() ว่า synchronized
ผลลัพธ์
Exception in thread "Thread-0" java.lang.IllegalMonitorStateException at java.lang.Object.wait(Native Method) at ThreadStateTest.run(ThreadStateTest.java:4)