IllegalThreadStateException — 스레드 상태가 요청 연산에 어울리지 않을 때

IllegalThreadStateException — 스레드 상태가 요청 연산에 어울리지 않을 때

IllegalThreadStateException은 스레드가 요청한 연산을 수행하기에 적절한 상태가 아닐 때 던져지는 예외예요. 예를 들어 이미 start()를 호출해 실행 중인 스레드를 다시 시작하려 하면 이 예외가 나와요.

출처: Java API Reference

본문

스레드는 NEW, RUNNABLE, TERMINATED 같은 수명 주기 상태를 가져요. 이 상태가 특정 연산을 허용하지 않는데 그 연산을 시도하면 이 예외를 던지는 방식이에요. 대표적인 예가 Thread.start()를 두 번 호출하는 경우예요 — 한 번 시작된 스레드는 다시 시작할 수 없으니까요.

상속 구조는 다음과 같아요.

java.lang.Object
  java.lang.Throwable
    java.lang.Exception
      java.lang.RuntimeException
        java.lang.IllegalArgumentException
          java.lang.IllegalThreadStateException

IllegalArgumentException의 하위 클래스라는 점이 흥미로운데, "잘못된 인자를 넘겼다"는 넓은 의미의 예외에 스레드 상태 관련 특수한 경우가 포함되기 때문이에요.

생성자

  • IllegalThreadStateException() — 상세 메시지 없이 생성해요.
  • IllegalThreadStateException(String s) — 지정된 상세 메시지로 생성해요.

관련 API로는 Thread.start()가 있어요.

더 알아보기 (Learn more)