2012년 9월 20일 목요일

OCJP 문제풀이 - Question 1



QUESTION 1
Given:

2. public class Threads2 implements Runnable {
3.
4.   public void run() {
5.     System.out.println("run.");
6.     throw new RuntimeException("Problem");
7.   }
8.   public static void main(String[] args) {
9.     Thread t = new Thread(new Threads2());
10.    t.start();
11.    System.out.println("End of method.");
12.  }
13.}

Which two can be results? (Choose two.)

A. java.lang.RuntimeException: Problem

B. run.
java.lang.RuntimeException: Problem

C. End of method.
java.lang.RuntimeException: Problem

D. End of method.
run.
java.lang.RuntimeException: Problem

E. run.
java.lang.RuntimeException: Problem
End of method.

Answer: DE
Section: All

Explanation/Reference:
쓰레드에 관한 이해를 묻는 문제이다.

위 예제를 실행하면 일단 하나의 쓰레드가 생성되어
그 쓰레드 내에서 main 메소드를 실행한다.
그리고 main 내에서 Thread2의 Thread 객체를 생성하여
start()를 통해 또하나의 쓰레드를 실행시킨다.

이때, 기존의 쓰레드는 새로운 쓰레드를 실행시키고 바로 Line 11 의 println을 실행하며,
새로생긴 쓰레드는 run() 메소드를 실행시킨다.

두개의 쓰레드는 누가 먼저 실행될지 모르기때문에,
기존의 쓰레드가 먼저 실행되어 종료되고, 새 쓰레드가 실행될수도 있고(보기 D)
새 쓰레드가 먼저 실행되고나서 기존의 쓰레드가 실행될수도 있다.(보기 E)

보기 A - Line 5도 실행하지 않고 Line6으로 뛰어넘을 수없고
보기 B - 새로운 쓰레드에서 Exception이 발생하더라도 기존쓰레드에는 영향을 끼치지 않기때문에
기존의 쓰레드의 println()도 정상적으로 실행되어야 한다.
보기 C - Line 5도 실행되지 않고, Line 6의 내용이 실행될 수 없다.

블로그 보관함