4.1) OCJP/1Z0-851 / 2012-08-28

OCJP (1Z0-851 / 2012-08-28 / Exam B) - 16 번

kkikkodev 2015. 8. 28. 03:23



관련 이론 및 문법

(synchronized 참고)

http://kkikkodev.tistory.com/143


(Thread 클래스 참고)

http://kkikkodev.tistory.com/141


문제 의도

주어진 소스 코드에서, 2 부분를 변화시켜서, 출력 결과가 1, 2, 3, 4, 5 가 되도록 하는 보기 2 개를 고르는 문제입니다.


답안

A, D


풀이 방법

소스 코드를 살펴보면, 1 번 라인에 TestFive 클래스가 정의되어 있는 것을 볼 수 있습니다. 2 번 라인에는, 멤버 변수 int 형 x 가 선언되어 있습니다. 3 번 라인에는, foo 메소드가 정의되어 있고, 그 안에는, x 를 가져와서 current 변수에 넣고 있고, 다시 x 에 current + 1 을 대입하고 있습니다. (쉽게 말해서, x 를 1 증가시킵니다.) 7 번 라인에는 go 메소드가 정의되어 있습니다. 그 안에서는, for 문을 돌면서 (5 번) Thread 를 생성하여 start 합니다. run 메소드가 불려지는데, run 메소드 안에서는, foo 메소드를 호출하고, x 를 출력합니다.


먼저, 1, 2, 3, 4, 5 처럼, 순서대로, x 가 증가되려면, foo 메소드가 동기화되어야 합니다. 따라서, foo 메소드의 내용을 동기화 시킨 보기 D 가 답안 후보가 됩니다. (구역 동기화)


그 다음, 순서대로 증가된 x 값을 출력하는 12 라인 문장또한, foo 메소드로 옮겨서, 같이 동기화 시켜야 합니다. 그래야, 순서대로 증가된 값들이 차례대로 출력됩니다. 따라서 보기 A 도 답안 후보가 됩니다.


따라서, 답안은 A 와 D 가 됩니다.