wait()
과 notifyAll()
을 사용하면 스레드의 순서를 제어할 수 있다.
간단하게 말하자면 wait은 스레드를 대기하게 만들고, notifyAll(또는 notify)는 대기중인 스레드를 꺠워주는 역할을 하는데, 자세한 것은 예시 코드를 보며 이해해보자.
여기서 가장 중요한건 wait()
과 notifyAll()
메서드 모두 synchronized 처리되어 있는 메서드 내부에서 호출되어야한다는 것이다.
그리고 notify()
라는 메서드도 있는데, notifyAll() 은 잠자고 있는 모든 스레드를 깨우고 notify()는 하나의 스레드만 깨운다. 여기서는 둘중 어느것을 써도 결과는 똑같다.
아래 코드를 보면 투표소가 두개 있고, 해당 투표소에서 투표를 하는 사람은 모두 10명이다.
여기서 투표소가 빈 곳이 하나도 없으면 기다리다가 하나라도 비었다고 알려주면 대기하던 사람 하나가 해당 투표소에서 투표를 할 수 있게 된다ㅏ.