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

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

kkikkodev 2015. 8. 1. 00:49



관련 이론 및 문법

(Thread 클래스 참고)

http://kkikkodev.tistory.com/141


(Runnable 인터페이스 참고)

http://kkikkodev.tistory.com/121


(Exception 참고)

http://kkikkodev.tistory.com/173


문제 의도

주어진 코드를 컴파일하여 실행했을 때 나올 수 있는 결과를 2 개 고르는 문제입니다.


답안

D, E


풀이 방법

이 문제는 Thread 와 RuntimeException 에 대한 문제입니다. 6 번 라인을 보면, Threads2 라는 클래스는 Runnable 인터페이스를 상속하고 있는 것을 알 수 있습니다. 8 번 라인에는 run 메소드를 overriding 하고 있고, run 안에서는 "run." 문자열을 출력하고, RuntimeException 객체를 만들어 ("Problem" 문자열을 매개변수로 넘기면서) 발생시킵니다. 12 라인의 main 메소드를 보면, 13 라인에서, Thread 객체 t 를 만들고, 14 라인에서 start 메소드를 호출합니다. 그 다음, 15 라인에서는 "End of method." 문자열을 출력합니다. 


소스코드를 분석해보았고, 이제 흐름을 살펴보면, 먼저 main 메소드가 호출되어, Thread 를 만들어 start 를 하면, run 메소드가 병행적으로 호출됩니다.기존의 main 쓰레드는 start 가 호출되고 나서도 계속해서 15 라인의 "End of method." 문자열을 출력하려고 하고, 새로 생긴 Thread 는 run 메소드를 호출하여 "run." 문자열을 출력하고, RuntimeException 을 발생시킵니다. RuntimeException 은 따로 예외처리를 하지 않더라도, JVM 이 알아서 발생된 라인을 출력해줍니다. (예외처리를 대신 알아서 해줍니다.) 


결과적으로, 화면에 출력되는 문자열은 총 3 가지인데, main 쓰레드에서 "End of method.", 새로 생긴 쓰레드에서 "run." 과 RuntimeException 발생 관련 문자열 이렇게 입니다. 보기 중에서 이 3 가지가 아닌 보기는 모두 답안 후보에서 제외합니다. (보기 A, 보기 B,  보기 C) 그리고, 쓰레드간의 출력 순서는 정해져 있지 않기 때문에 순서는 보장되지 않고 매번 실행될 때마다 바뀔 수가 있습니다. 따라서, 답안은 D 와 E 가 됩니다.