관련 이론 및 문법

(synchronized 참고)

http://kkikkodev.tistory.com/143


(데드락 (deadlock) 참고)

http://kkikkodev.tistory.com/138


문제 의도

다음 보기 중, 참인 것을 2 개 고르는 문제입니다.


답안

A, D


풀이 방법

먼저, 보기 A 는, static 메소드를 동기화하는 것은 가능하다는 것인데, static 메소드에 동기화를 걸면, 개별 인스턴스가 아닌, 클래스 전체로부터 lock 을 얻게 됩니다. 따라서, 답안 후보가 됩니다.


보기 B 는, 쓰레드가 yield 메소드를 호출하면 lock 을 내려놓는다는 것이고, 보기 C 는 sleep 메소드를 호출하면 lock 을 내려놓는다는 것인데, 쓰레드는 wait 메소드를 호출할 때만, lock 을 내려놓기 때문에, 이는 답안 후보에서 제외합니다.


보기 D 는, Object.wait() 메소드는 오직 동기화된 상태에서만 호출될 수 있다는 것이고, 보기 E 는, Thread.sleep() 메소드는 오직 동기화된 상태에서만 호출될 수 있다는 것인데, 동기화된 상태에서만 호출되어야 하는 메소드는 wait 이기 때문에, D 만 답안 후보가 됩니다.


보기 F 는, 쓰레드 스케줄러가 notify 요청을 받으면, 쓰레드를 1 개 깨우고, 깨워진 쓰레드는 즉시, lock 을 내려놓는다는 것인데, 깨워진 쓰레드가 즉시 lock 을 내려놓는 것이 아니고, notify 요청을 한 현재 쓰레드가 lock 을 내려놓으면, 그 후에 lock 을 가져오게 됩니다. 따라서 답안 후보에서 제외합니다.


결과적으로, 답안은, A 와 D 가 됩니다.


by kkikkodev 2015. 8. 27. 14:35