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