OCJP (1Z0-851 / 2012-08-28 / Exam C) - 19 번
관련 이론 및 문법
(데드락 (deadlock) 참고)
http://kkikkodev.tistory.com/138
문제 의도
foo 와 bar 는 많은 다른 thread 들로부터 이용가능한 public reference 입니다. foo 는 한 thread 를 참조하고 있고 bar 는 Object 입니다. thread foo 는 현재 bar.wait() 을 실행중입니다. 다른 thread 로부터, foo 가 wait() 실행을 멈추도록 하는 것을 보장하는 가장 확실한 방법을 고르는 문제입니다.
답안
E
풀이 방법
먼저, foo 참조 변수는 Thread 객체를 가리키고 있고, bar 참조 변수는 Object 객체를 가리키고 있습니다. foo 는 bar.wait(); 문장을 통해서 임계 영역을 들어가지 못해서 lock 을 내려놓고 대기하고 있습니다. 임계 영역의 작업을 마치고 빠져 나오는 다른 thread 가 bar.notify(); 혹은 bar.notifyAll(); 문장을 호출해 줘야만 wait 하고 있던 thread 가 깨어나서 다시 임계 영역에 진입할 수가 있는데, notify() 메소드는 특정 thread (foo thread) 를 지정해서 깨울 수가 없습니다. foo thread 말고도 다른 thread 들도 bar.wait(); 를 호출하여 임계 영역에 들어가지 못해서 대기하고 있을 수도 있으므로, 이 thread 들도 모두 깨워줘야만 그 중에 foo thread 도 확실하게 깨울 수 있게 됩니다.
결과적으로 답안은 E 가 됩니다.