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