Computer >> Máy Tính >  >> Lập trình >> Java

Chúng ta có thể gọi phương thức wait () mà không nhận được khóa trong Java không?

Không , chúng tôi không thể gọi wait () phương pháp mà không có khóa . Trong Java, khi khóa đã được mua thì chúng ta cần gọi phương thức wait () ( với thời gian chờ hoặc không có thời gian chờ) trên đối tượng đó. Nếu chúng tôi đang cố gắng gọi chờ () mà không có khóa, nó có thể ném java.lang.IllegalMonitorStateException .

Ví dụ

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();
   }
}

Trong ví dụ trên, chúng ta cần gọi wait () mà không có được khóa để nó tạo ra IllegalMonitorStateException trong thời gian chạy. Để khắc phục sự cố, chúng tôi cần lấy khóa trước khi gọi wait () và khai báo run () phương pháp đã đồng bộ hóa.

Đầu ra

Exception in thread "Thread-0" java.lang.IllegalMonitorStateException
at java.lang.Object.wait(Native Method)
at ThreadStateTest.run(ThreadStateTest.java:4)