notifyAll() 왜 모든 wait가 안깨어 나는거죠?
글쓴이: gloomyr / 작성시간: 수, 2013/01/23 - 11:40오전
컨트롤러 내부에서
쓰레드 A(){
synchronized (lock) {
lock.wait(500000);
}
}
에서 LOCK을 잡아 줍니다.
쓰레드 B()에서
synchronized (lock) {
lock.notifyAll();
}
해서 풀어주는 코드가 있습니다.
A쓰레드는 외부에서 요청이 있을때마다 계속해서 생성됩니다.
그런데 요청이 여러번 들어오면 그만큼 쓰레드 B를 해줘야 락이 풀린다는게 이상합니다.
예를들면
A A A가 세번 호출되서 쓰레드가 3개 생성되고 나서 B를 호출하면 제일 처음 A만 락이 풀리고 두번째 세번째는 그대로입니다.
B B B 세번을 호출해야 다 풀리는..
notifyAll()은 전부다 깨어나야 되는거아닌가요?
Forums:
댓글 달기