Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Java

เราสามารถเรียกเมธอด wait() โดยไม่ได้รับล็อกใน Java ได้หรือไม่


ไม่ เราไม่สามารถเรียก 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)