이 설명서는 보관되지만 유지 되지 않습니다.

관리되는 스레드 상태

업데이트: 2007년 11월

Thread.ThreadState 속성은 스레드의 현재 상태를 표시하는 비트 마스크를 제공합니다. 스레드는 항상 ThreadState 열거형의 가능한 상태 중 하나 이상의 상태에 속하며 동시에 여러 상태를 가질 수도 있습니다.

중요:

일부 디버깅 시나리오에서만 스레드 상태가 중요합니다. 스레드 작업을 동기화하려고 코드에서 스레드 상태를 사용해서는 안 됩니다.

관리되는 스레드를 만들면 Unstarted 상태가 됩니다. 운영 체제에서 시작된 상태로 스레드가 이동되기 전까지 스레드는 Unstarted 상태에 있습니다. Start를 호출하면 운영 체제에서 스레드가 시작될 수 있음을 알게 되지만 스레드의 상태를 변경하지 않습니다.

관리되는 환경에 들어간 관리되지 않는 스레드는 이미 시작된 상태에 있습니다. 일단 시작된 상태가 되면 스레드의 상태를 변경할 수 있는 여러 작업이 있습니다. 다음 표에서는 상태를 변경시키는 작업과 변경된 상태를 보여 줍니다.

작업

변경된 상태

다른 스레드가 Thread.Start를 호출합니다.

변경 안 됨

스레드가 Thread.Start에 응답하여 실행을 시작합니다.

Running

스레드가 Thread.Sleep을 호출합니다.

WaitSleepJoin

스레드가 다른 개체의 Monitor.Wait를 호출합니다.

WaitSleepJoin

스레드가 다른 스레드의 Thread.Join을 호출합니다.

WaitSleepJoin

다른 스레드가 Thread.Suspend를 호출합니다.

SuspendRequested

스레드가 Thread.Suspend 요청에 응답합니다.

Suspended

다른 스레드가 Thread.Resume을 호출합니다.

Running

다른 스레드가 Thread.Suspend를 호출합니다.

Running

다른 스레드가 Thread.Abort를 호출합니다.

AbortRequested

스레드가 Thread.Abort에 응답합니다.

Aborted

Running상태의 값은 0이므로 비트 테스트를 수행하여 이 상태를 확인할 수는 없습니다. 그 대신 의사(pseudo) 코드에서 다음 테스트를 사용할 수 있습니다.

if ((state & (Unstarted | Stopped)) == 0)   // implies Running   

스레드는 특정 시점에서 두 개 이상의 상태를 가질 수 있습니다. 예를 들어, 스레드가 Monitor.Wait 호출에서 중단되고 다른 스레드가 해당 스레드에서 Abort를 호출하면 이 스레드는 WaitSleepJoinAbortRequested 상태를 모두 갖게 됩니다. 이 경우 Wait 호출에서 스레드가 반환되거나 중단되는 즉시 ThreadAbortException을 받게 됩니다.

Start를 호출한 결과 스레드가 Unstarted 상태를 벗어나면 Unstarted 상태로 다시 돌아갈 수 없으며, Stopped 상태에 있는 스레드는 이 상태를 벗어날 수 없습니다.

표시: