관리되는 스레드 상태
업데이트: 2011년 5월
Thread.ThreadState 속성은 스레드의 현재 상태를 표시하는 비트 마스크를 제공합니다. 스레드는 항상 ThreadState 열거형의 가능한 상태 중 하나 이상의 상태에 속하며 동시에 여러 상태를 가질 수도 있습니다.
중요 |
---|
일부 디버깅 시나리오에서만 스레드 상태가 중요합니다.스레드 작업을 동기화하려고 코드에서 스레드 상태를 사용해서는 안 됩니다. |
관리되는 스레드를 만들면 ThreadState.Unstarted 상태가 됩니다. 운영 체제가 스레드 실행을 예약할 수 있도록 Running 상태로 설정하는 Thread.Start 메서드를 호출할 때까지 스레드는 Unstarted 상태로 유지됩니다.
관리되는 환경에 들어간 관리되지 않는 스레드는 이미 시작된 상태입니다. 일단 스레드가 시작된 다음에는 여러 작업을 통해 스레드 상태를 변경할 수 있습니다. 다음 표에서는 상태를 변경시키는 작업과 변경된 상태를 보여 줍니다.
동작 |
변경된 상태 |
---|---|
Thread 클래스의 생성자가 호출됩니다. |
|
또 다른 스레드가 새 스레드에서 Thread.Start 메서드를 호출하고 호출이 반환됩니다. |
|
스레드가 Thread.Sleep을 호출합니다. |
|
스레드가 다른 개체의 Monitor.Wait를 호출합니다. |
|
스레드가 다른 스레드의 Thread.Join을 호출합니다. |
|
다른 스레드가 Thread.Suspend를 호출합니다. |
|
스레드가 Thread.Suspend 요청에 응답합니다. |
|
다른 스레드가 Thread.Resume을 호출합니다. |
|
다른 스레드가 Thread.Abort를 호출합니다. |
|
스레드가 Thread.Abort에 응답합니다. |
Running 상태의 값은 0이므로 비트 테스트를 수행하여 이 상태를 확인할 수는 없습니다. 그 대신 의사(pseudo) 코드에서 다음 테스트를 사용할 수 있습니다.
if ((state & (Unstarted | Stopped)) == 0) // implies Running
스레드는 특정 시점에서 두 개 이상의 상태를 가질 수 있습니다. 예를 들어, 스레드가 Monitor.Wait 호출에서 중단되고 다른 스레드가 해당 스레드에서 Abort를 호출하면 이 스레드는 WaitSleepJoin과 AbortRequested 상태를 모두 갖게 됩니다. 이 경우 Wait 호출에서 스레드가 반환되거나 중단되는 즉시 ThreadAbortException을 받게 됩니다.
Start를 호출한 결과 스레드가 Unstarted 상태를 벗어나면 Unstarted 상태로 다시 돌아갈 수 없으며, Stopped 상태에 있는 스레드는 이 상태를 벗어날 수 없습니다.
참고 항목
참조
기타 리소스
변경 기록
날짜 |
변경 내용 |
이유 |
---|---|---|
2011년 5월 |
Thread.Start 메서드와 Running 상태 간의 관계에 대한 설명이 추가되었습니다. |
고객 의견 |
2011년 3월 |
Thread.Start 메서드와 Running 상태 간의 관계에 대한 설명이 포함되었습니다. |
콘텐츠 버그 수정 |