InterruptedException — 스레드가 인터럽트됐을 때

InterruptedException — 스레드가 인터럽트됐을 때

InterruptedException은 스레드가 대기(waiting)·수면(sleeping)·또는 다른 작업으로 바쁜 상태인데, 그 활동 중(또는 활동 전에) 인터럽트(interrupt)를 받았을 때 던져지는 예외예요.

출처: Java API Reference

본문

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()가 있어요.

더 알아보기 (Learn more)