관련 이론 및 문법

(try ~ catch ~ finally 참고)

http://kkikkodev.tistory.com/106


문제 의도

주어진 소스코드에 대한 설명 중 옳은 것을 고르는 문제입니다.


A. 이 코드는 InterruptedException 이 발생될 수 있습니다.

B. 이 코드는 IllegalMonitorStateException 이 발생될 수 있습니다.

C. 이 코드는 10 분 후에 TimeoutException 이 발생될 수 있습니다.

D. obj.wait() 와 obj.notify() 의 순서를 바꾸면 이 메소드가 정상적으로 돌아갈 것입니다.

E. 또다른 쓰레드에서 notify 혹은 notifyAll 메소드를 호출한다면, 이 메소드가 정상적으로 돌아갈 것입니다.

F. obj.wait() 대신에 ((Thread)obj).wait() 로 바꾸지 않는다면 이 코드는 컴파일되지 않을 것입니다. 


답안

A


풀이 방법

이 문제는 언뜻 보기에는 Thread 문제 혹은 동기화 문제처럼 보이지만, 예외처리에 관련된 문제입니다. Object 클래스의 wait 메소드의 원형을 살펴보면, 


public final void wait() throws InterruptedException{...}


처럼, InterruptedException 이 발생될 수도 있으니, 이 메소드를 호출하는 쪽에서 try ~ catch ~ finally 로 해당 예외를 처리해주던지 혹은, throws InterruptedException 을 마찬가지로 사용하여 해당 메소드에서도 예외를 처리하지 않고 넘기던지 해야 합니다. 하지만 주어진 소스코드에서는, 두 가지 방법 중 하나도 사용되지 않아서, InterruptedException 을 방치하고 있습니다. 따라서 이 때문에 컴파일 에러가 나게 되는 것입니다. 따라서, 답안은 A 가 됩니다.


by kkikkodev 2015. 7. 7. 22:57