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

OCJP (1Z0-851 / 2012-08-28 / Exam A) - 4 번

kkikkodev 2015. 7. 8. 01:38



관련 이론 및 문법

(synchronized 참고)

http://kkikkodev.tistory.com/143


(Runnable 인터페이스 참고)

http://kkikkodev.tistory.com/144


문제 의도

주어진 코드를 컴파일하여 실행한 출력 결과로 나올 수 있는 보기를 고르는 문제입니다.


답안

B


풀이 방법

PingPong2 클래스의 메소드인 hit 은 synchronized 키워드를 사용하여 동기화되어 있습니다. 내부적으로는, 매개변수로 long 형 변수 n 을 받아서, for 문을 돌면서, "n-1 n-2" 를 화면에 출력하게 됩니다. 이 메소드는 동기화되어 있기 때문에, 어느 한 쓰레드가 이 메소드를 실행하는 동안에는, 다른 쓰레드는 이 메소드 안으로 들어올 수 없게 됩니다. 


main 메소드의 4 ~ 5 라인을 보면, 두 개의 Thread 를 생성하여, start 메소드를 호출하고 있습니다. Thread 의 start 메소드를 호출하였으므로, 자동으로 7 라인의 run 메소드가 호출될 것입니다. run 메소드에서는 pp2 (2 라인의 PingPong2 클래스의 멤버 인스턴스) 의 hit 메소드를 호출하면서, 현재 쓰레드의 ID 를 매개변수로 넘깁니다.


즉, 다시 말하자면, 쓰레드 2 개를 만들어서, 실행하여 동기화된 메소드인 hit 을 호출하는 것입니다. 쓰레드 2 개 중, 어떤 쓰레드가 먼저 hit 메소드를 실행하지는 모르지만, 확실한 것은, 한 쓰레드가 hit 메소드를 실행하는 도중에는, 다른 쓰레드가 hit 메소드를 실행할 수 없다는 점입니다. 따라서, 쓰레드의 ID 의 순서에 상관없이 출력되는 뒷부분 숫자인 n-1 과 n-2 의 순서는 보장되어야 한다는 것입니다. 첫 번째 쓰레드가 진입하여 n-1 n-2 를 출력할 것이고, 이 쓰레드가 끝나면, 다음 쓰레드가 들어와서 또 n-1 n-2 를 출력할 것입니다. (n 은 임의의 서로 다른 수) 


따라서, 보기 중에서, 쓰레드의 ID 말고, 뒤에 붙는 숫자의 패턴이 "X-1 X-2 Y-1 Y-2" 와 같이 출력되는 B 가 답이 됩니다.