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