Computer >> 컴퓨터 >  >> 프로그램 작성 >> Java

Java에서 잠금을 획득하지 않고 wait() 메서드를 호출할 수 있습니까?

<시간/>

아니요 , 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();
   }
}

위의 예에서 wait()를 호출해야 합니다. 잠금을 획득하지 않고 메소드를 사용하여 IllegalMonitorStateException 을 생성합니다. 런타임에. 문제를 해결하려면 wait()를 호출하기 전에 잠금을 획득해야 합니다. 메소드 및 run() 선언 메소드가 동기화되었습니다.

출력

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