ThreadError

ThreadError (스레드 예외)

스레드(thread)에 대해 잘못된 연산을 시도했을 때 Ruby가 던지는 예외에요. 스레드를 다루는 API를 사용하다 보면 상태가 맞지 않는 동작을 하려다 이 예외를 만나는 경우가 많아요.

출처: Ruby 3.3 API

본문

예를 들어, 다른 스레드가 하나도 시작되지 않은 상황에서 현재 스레드를 Thread.stop으로 멈추려고 하면 문제가 생겨요. 아래 코드를 볼게요.

Thread.stop

이 코드는 다음과 같은 예외를 던져요.

ThreadError: stopping only thread

왜냐하면 지금 유일한 스레드 하나를 멈추면 다시 깨워줄 누군가가 없어서 영영 멈춰버리기 때문이에요. 실제로 스레드를 영원히 잠들게 하고 싶다면 sleep을 쓰는 편이 낫다는 점도 참고하세요. 문서에서는 use sleep to stop forever라고 안내하고 있어요.