다음을 통해 공유


관리되는 스레드 상태

업데이트: 2011년 5월

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

중요중요

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

관리되는 스레드를 만들면 ThreadState.Unstarted 상태가 됩니다. 운영 체제가 스레드 실행을 예약할 수 있도록 Running 상태로 설정하는 Thread.Start 메서드를 호출할 때까지 스레드는 Unstarted 상태로 유지됩니다.

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

동작

변경된 상태

Thread 클래스의 생성자가 호출됩니다.

Unstarted

또 다른 스레드가 새 스레드에서 Thread.Start 메서드를 호출하고 호출이 반환됩니다.

참고참고
Start 메서드는 새 스레드가 Running 상태가 될 때까지 반환되지 않습니다.Start를 호출하는 중에는 상태가 무엇인지 알 수 있는 방법이 없습니다.

Running

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

WaitSleepJoin

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

WaitSleepJoin

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

WaitSleepJoin

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

SuspendRequested

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

Suspended

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

Running

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

AbortRequested

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

AbortedStopped

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

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

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

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

참고 항목

참조

ThreadAbortException

Thread

ThreadState

기타 리소스

관리되는 스레딩

변경 기록

날짜

변경 내용

이유

2011년 5월

Thread.Start 메서드와 Running 상태 간의 관계에 대한 설명이 추가되었습니다.

고객 의견

2011년 3월

Thread.Start 메서드와 Running 상태 간의 관계에 대한 설명이 포함되었습니다.

콘텐츠 버그 수정