Java의 대기 및 알림: IllegalMonitorStateException 이해
Java에서 대기 및 알림 메소드를 사용하면 스레드가 실행을 동기화할 수 있습니다. 그러나 이러한 방법을 잘못 사용하면 IllegalMonitorStateException이 발생할 수 있습니다.
이유를 이해하기 위해 제공된 코드를 분석해 보겠습니다.
Main.java
Runner.java
문제는 Runner.run()의 wait() 호출에 있습니다. 스레드가 객체에 대해 wait()를 호출할 때 해당 객체의 모니터를 소유해야 합니다. 소유권은 개체 동기화를 통해 설정됩니다.
문제를 해결하려면 wait() 호출 내에서 Main.main을 동기화하세요.
<code class="java">class Runner implements Runnable { public void run() { try { synchronized (Main.main) { Main.main.wait(); } } catch (InterruptedException e) {} System.out.println("Runner away!"); } }</code>
이렇게 하면 현재 스레드가 Main을 소유하게 됩니다. wait() 조건에 들어가기 전에 main의 모니터를 확인하세요.
notify() 및 informAll()에도 동일한 원칙이 적용됩니다. 스레드는 이러한 메서드를 실행하기 전에 개체의 모니터를 소유해야 합니다.
위 내용은 Java의 Wait and Notify를 사용할 때 IllegalMonitorStateException이 발생하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!