관련 이론 및 문법

(Exception 참고)

http://kkikkodev.tistory.com/173


문제 의도

주어진 소스코드를 컴파일하여 실행한 결과를 고르는 문제입니다.


답안

B


풀이 방법

소스코드를 살펴보면, 1 번 라인에 Threads4 라는 클래스가 정의되어 있고, 2 번 라인에 main 메소드가 있습니다. 또, 5 번 라인에는 go 메소드가 정의되어 있고, 그 안에서는 Runnable 객체를 생성하고, 이를 가지고 Thread 를 생성하여 start 를 2 번 호출하고 있습니다.


프로그램이 실행되어, 3 번 라인에 가면, Threads4 객체의 생성자를 호출하여 객체를 생성한 후 go 메소드를 바로 호출합니다. 6 번 라인에서 Runnable 객체를 생성하여 r 변수로 가리키게 합니다. (run 메소드 오버라이딩 포함) 내부의 run 메소드에서는 "foo" 를 출력합니다. 11 번 라인에서는 위에서 생성한 r 을 가지고 Thread 를 생성하여 t 라는 변수로 가리키게 합니다. 12 번 라인에서는 t.start() 문을 통해 쓰레드를 시작합니다. 그리고, 13 번 라인에서 또, t.start() 문을 통해서 시작된 쓰레드를 또 시작하려고 합니다. 하지만, 이미 12 번 라인에서 시작된 쓰레드는 진행중이어서, 아직 종료처리가 제대로 완료되지 않은 상태이기 때문에, 또 그 쓰레드를 시작을 하려고 하면, 부적합한 쓰레드의 상태가 되기 때문에, IllegalThreadStateException 이 발생하게 됩니다.


따라서 답안은 B 가 됩니다.


by kkikkodev 2015. 9. 10. 01:07