본문 바로가기
Error(Exception)/ERROR-JAVA

[자바(java)] IllegalMonitorStateException

by control+c 2023. 2. 19.
반응형

IllegalMonitorStateException

IllegalMonitorStateException은 자바 개발 언어에서 발생하는 예외 상황이다. 이 예외는 스레드에서 사용하는 동기화 객체 (Object, Class, 락 등)의 동기화 메소드를 사용할 때 발생할 수 있다. 이 예외가 발생하면 프로그램 실행이 멈추고 스레드는 더 이상 실행되지 않게 된다. IllegalMonitorStateException은 다음과 같은 에러로 보일 수 있다.

Exception in thread "main" java.lang.IllegalMonitorStateException
    at java.lang.Object.wait(Native Method)
    at java.lang.Object.wait(Object.java:502)
    at Test.run(Test.java:20)
    at java.lang.Thread.run(Thread.java:745)

이러한 에러는 스레드가 객체나 클래스의 락을 사용할 때 발생할 수 있다. 이 때 스레드가 wait(), notify() 메소드를 사용하거나 스레드가 객체나 클래스의 락을 사용하지 않고 wait(), notify() 메소드를 사용할 때 발생한다.

IllegalMonitorStateException을 해결하는 방법으로는 다음과 같이 두 가지가 있다.

  1. 스레드가 락을 사용하는 경우, 객체 또는 클래스 락을 사용하기 전에 synchronized 블록을 사용하여 락을 얻고 사용하도록 한다.

  2. 스레드가 락을 사용하지 않는 경우, 스레드가 wait(), notify() 메소드를 사용하는 경우 반드시 객체 또는 클래스 락을 사용하기 전에 synchronized 블록을 사용하여 락을 얻고 사용하도록 한다.

위와 같이 IllegalMonitorStateException을 해결하기 위해서는 반드시 객체 또는 클래스 락을 사용하기 전에 synchronized 블록을 사용하여 락을 얻고 사용하는 것이 좋다.

예시 주석
IllegalMonitorStateException이 발생하는 경우는 객체나 클래스 락을 사용하기 전에 synchronized 블록을 사용하여 락을 얻고 사용하는 것이 중요하다. 스레드가 wait(), notify() 메소드를 사용할 때는 반드시 객체 또는 클래스 락을 사용하기 전에 synchronized 블록을 사용하여 락을 얻고 사용하도록 해야 한다.

반응형

댓글