0%

[Java] wait와 notify메서드

Java Thread wait() , notify(), notifyAll() 메서드에 대해서 알아보자.

쓰레드 클래스의 메서드가 아닌, 자바 최상위 클래스인 Object 클래스의 존재하는 메서드.

메서드 기능 비고
wait lock를 소유한 스레드가 자신의 제어권을 양보하고 WAITING 또는 TIMED_WAITING상태에서 대기 호출하는 스레드가 반드시 고유 락을 갖고있다야 한다.
notify WAIT 상태에 빠져있는 다른 스레드를 다시 RUNNABLE 상태로 변경시키는 역할 호출하는 스레드가 반드시 고유 락을 갖고있다야 한다.
notifyAll 잠들어 있던 모든 스레드를 깨운다 호출하는 스레드가 반드시 고유 락을 갖고있다야 한다.

호출하는 쪽 스레드가 synchronized 블록내에서 실행(고유락을 획득한) 되지 않으면 IllegalMonitorStateException 이 발생한다.잠든 스레드 하나만 깨우도록 제어하기 어렵기 때문에 보통은 notifyAll()을 사용해서 모두 깨우고, 깨어난 스레드들은 락을 획득하기 위해 경쟁한다. 락을 획득한 스레드만이 wait()함수를 리턴시키고 그 다음 로직을 수행한다.

Welcome to my other publishing channels