>  기사  >  백엔드 개발  >  C#의 멀티스레딩을 위한 Thread 클래스에 대한 자세한 설명

C#의 멀티스레딩을 위한 Thread 클래스에 대한 자세한 설명

零下一度
零下一度원래의
2017-06-23 16:51:424788검색

System.Threading.Thread 클래스를 사용하여 스레드를 생성하고 제어합니다.

일반적으로 사용되는 생성자는 다음과 같습니다.

        // 摘要: //     初始化 System.Threading.Thread 类的新实例,指定允许对象在线程启动时传递给线程的委托。//// 参数: //   start://     System.Threading.ParameterizedThreadStart 委托,它表示此线程开始执行时要调用的方法。//// 异常: //   System.ArgumentNullException://     start 为 null。        [SecuritySafeCritical]public Thread(ParameterizedThreadStart start);//// 摘要: //     初始化 System.Threading.Thread 类的新实例。//// 参数: //   start://     System.Threading.ThreadStart 委托,它表示此线程开始执行时要调用的方法。//// 异常: //   System.ArgumentNullException://     start 参数为 null。        [SecuritySafeCritical]public Thread(ThreadStart start);

1. 매개 변수 없이 스레드를 만듭니다.

ThreadStart 대리자는 반환 유형이 void인 매개 변수 없는 메서드를 정의합니다.

R
        public void Main()
        {
            Thread vThread = new Thread(ThreadFun);//vThread.Name = "td_Name";  // 线程名称vThread.Start(); //开始执行线程Console.WriteLine("This is the main thread:id=" + Thread.CurrentThread.ManagedThreadId);
        }void ThreadFun() // 来自委托:ThreadStart         {
            Console.WriteLine("Running in a new thread:id=" + Thread.CurrentThread.ManagedThreadId);for (int i = 0; i < 10; i++)
            {
                Console.Write(".");
                Thread.Sleep(500);
            }
            Console.WriteLine("THREAD END");
        }
ALOUTPUT 결과 :

lambda expression

를 사용하여 호소 코드에 threadFun ()을 사용하여 간단한 방법을 사용하여 스레드를 사용합니다. 매개변수를 전달하는 두 가지 방법이 있습니다

: 하나는
ParameterizedThreadStart

대리자와 함께 메서드 매개변수를 사용하여 Thread를 구성하는 것이고, 다른 하나는 사용자 정의 클래스를 만들고 스레드 메서드를 인스턴스 메서드로 정의하는 것입니다. 스레드를 시작하기 전에 인스턴스 데이터.

예: 매개변수 전달

        public void Main()
        {
            Thread vThread = new Thread(() =>{
                Console.WriteLine("Running in a new thread");});//vThread.Name = "td_Name";  // 线程名称vThread.Start(); //开始执行线程Console.WriteLine("This is the main thread");
        }
첫 번째 방법 사용:
        public struct TdData // 传递数据        {public string Message;  //数据string字段}
두 번째 방법 사용: 먼저 클래스를 사용자 정의합니다.
        public void Main()
        {
            TdData tData = new TdData() { Message = "Thread Info" };
            Thread vThread = new Thread(ThreadFun);
            vThread.Start(tData);   // 开始执行线程,传递参数Console.WriteLine("This is the main thread");
        }void ThreadFun(object pObj) // 来自委托:ParameterizedThreadStart         {
            TdData vData = (TdData)pObj;
            Console.WriteLine("In a new thread, Received:{0}", vData.Message);            
        }

그런 다음 (필요한 경우) 메인 스레드에 스레드를 생성하고 인스턴스 메서드
TdHelper.ThreadFun()
을 생성자의 매개 변수로 사용합니다.

    public class TdHelper
    {public TdData mData; // 传递数据// 构造函数public TdHelper(TdData pData)
        {this.mData = pData;
        }public void ThreadFun() // 来自委托:ThreadStart         {
            Console.WriteLine("In a new thread, TdDataMessage:{0}", mData.Message);
        }
    }

3. 백그라운드 스레드

기본적으로 Thread 클래스에 의해 생성된 스레드는 포그라운드 스레드이고 스레드 풀에 있는 스레드는 항상 백그라운드 스레드입니다. 하나의 포그라운드 스레드가 실행 중인 동안에는 애플리케이션 프로세스가 실행 중입니다. 여러 포그라운드 스레드가 실행 중이고 Main() 메서드가 종료되면 모든 포그라운드 스레드가 해당 작업을 완료할 때까지 애플리케이션이 계속 활성 상태입니다. Thread 클래스 인스턴스의 IsBackground

속성을

        public void Main()
        {
            TdData tData = new TdData() { Message = "Thread Info" };
            TdHelper tHelper = new TdHelper(tData); // 传递参数Thread vThread = new Thread(tHelper.ThreadFun);
            vThread.Start();
            Console.WriteLine("This is the main thread");
        }
설정하여 백그라운드 스레드로 만들 수 있습니다.

IsBackground 속성의 기본값이

false

인 경우 콘솔에서 3개의 출력 문장을 볼 수 있습니다. 전체 정보가 있지만 가 true

로 설정되면 메인 스레드 Main()이 실행을 완료하고 세 번째 메시지(
Title2
)가 출력되기 전에 콘솔 창이 자동으로 닫힙니다.

4. 스레드 우선순위 Thread 클래스 인스턴스의 우선순위를 조정할 수 있습니다. 기본값은 다음과 같습니다. vThread.Priority = ThreadPriority.Normal // 관계. : Highest > AboveNormal > Normal > BelowNormal > Lowest

5. 스레드를 제어합니다

스레드를 생성합니다. 그러나 Start() 메서드를 호출한 후에도 새 스레드는 여전히 Running 상태가 아니라 Unstarted 상태입니다. 운영 체제의 스레드 스케줄러가 스레드를 실행하도록 선택한 경우에만 스레드가 실행 중 상태로 변경됩니다. Thread.ThreadState 속성을 통해 스레드의 현재 상태를 가져올 수 있습니다.

Thread.Sleep() 메서드를 사용하면 스레드가 WaitSleepJoin 상태가 됩니다. Sleep() 메서드에서 정의한 기간이 지나면 스레드는 운영 체제에서 다시 예약할 때까지 기다립니다.

스레드를 중지하려면 Thread.Abort() 메서드를 호출할 수 있습니다. 이 메소드를 호출하면 종료 명령을 수신하는 스레드에서 ThreadAbortException이 발생합니다. 핸들러를 사용하여 이 예외를 포착하면 스레드가 종료되기 전에 일부 정리 작업을 완료할 수 있습니다. Thread.Abort() 메서드 호출의 결과로 ThreadAbortException 예외를 수신한 후에도 스레드는 계속 작업할 수 있습니다. 스레드가 재설정되지 않고 종료되면 종료 요청을 받은 스레드의 상태가 AbortRequested에서 Aborted로 변경됩니다.

스레드가 끝날 때까지 기다리려면 Thread.Join() 메서드를 호출하면 현재 스레드를 중지하고 조인된 스레드가 완료될 때까지 WaitSleepJoin 상태로 설정됩니다.

참조:

[]

위 내용은 C#의 멀티스레딩을 위한 Thread 클래스에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
이전 기사:VSCode를 사용하여 .NET Core 프로젝트 작성에 대한 예제 자습서다음 기사:VSCode를 사용하여 .NET Core 프로젝트 작성에 대한 예제 자습서

관련 기사

더보기