InterruptedException — 스레드가 인터럽트됐을 때
InterruptedException — 스레드가 인터럽트됐을 때
InterruptedException은 스레드가 대기(waiting)·수면(sleeping)·또는 다른 작업으로 바쁜 상태인데, 그 활동 중(또는 활동 전에) 인터럽트(interrupt)를 받았을 때 던져지는 예외예요.
본문
Object.wait(), Thread.sleep() 같은 블로킹(blocking) 연산은 다른 스레드가 Thread.interrupt()로 인터럽트를 걸면 깨어나면서 이 예외를 던져요. 메서드가 현재 스레드의 인터럽트 상태를 검사하고 싶다면, 다음 코드처럼 처리할 수도 있어요.
if (Thread.interrupted()) // 인터럽트 상태를 초기화한다!
throw new InterruptedException();
이 예외는 checked exception이라, 호출하는 쪽에서 반드시 처리하거나 다시 던져야 해요. "블로킹 연산이 중단됐다"는 협조적인 취소(cancellation) 신호로 자주 사용돼요.
상속 구조는 다음과 같아요.
java.lang.Object
java.lang.Throwable
java.lang.Exception
java.lang.InterruptedException
생성자
InterruptedException()— 상세 메시지 없이 생성해요.InterruptedException(String s)— 지정된 상세 메시지로 생성해요.
관련 API로는 Object.wait() 계열, Thread.sleep(long), Thread.interrupt(), Thread.interrupted()가 있어요.