스토리지

[3.29] 스레드 본문

Unity/수업내용(C#)

[3.29] 스레드

ljw4104 2021. 3. 29. 10:13

Thread

  • 일종의 흐름, Main 메서드또한 Main Thread이다.
  • Custom Thread를 선언하고 시작하면 Main Method와는 상관없이 각각의 흐름대로 실행이된다.
  • Thread는 메인메서드가 끝나서도 프로세스가 계속남아 실행될 가능성이 있으므로 확실히 끝내줘야된다.
using System.Threading;

Thread 스레드이름 = new Thread(new ThreadStart(메서드));
//ThreadStart는 델리게이트 형식이다. 람다식사용가능.

스레드이름.Start();		//스레드를 시작하는 함수.
스레드이름.Abort();		//스레드를 종료함. ThreadAbortException을 던진다

Thread.Sleep(int milliseconds); //milliseconds만큼 스레드를 일시정지시킴

 

using System;
using System.Threading;

namespace Study00
{
    public class App
    {
        public App()
        {
            //스레드 변수선언
            Thread t;

            //ThreadStart대리자 인스턴스화
            ThreadStart ts = new ThreadStart(() =>
            {
                for (int i = 0; i < 10; i++)
                {
                    Console.WriteLine("Hello");
                    Thread.Sleep(500);
                }
            });

            //스레드 인스턴스화(ThreadStart대리자 인스턴스화)
            t = new Thread(ts);

            //스레드 시작
            t.Start();

            Thread t2 = new Thread(new ThreadStart(Hi));
            t2.Start();
        }

        private void Hi()
        {
            for (int i = 0; i < 10; i++)
            {
                Console.WriteLine("Hi");
                Thread.Sleep(500);
            }
        }
    }
}

 

 

  • Main함수도 일종의 스레드이다.
  • 스레드는 생성되면 Main의 흐름과 상관없이 진행된다.
  • 각 스레드간의 우선순위는 명시하지 않으면 없으며, 누가 더 높은지는 OS가 지정하므로 알 수 없다.

실행할 때마다 점유하는 Thread가 다르기 때문에 결과는 항상 달라진다

 

threadName.join()

  • 해당 스레드가 종료되기전까지는 Block 상태(프로그램을 진행하지 않음)로 바꾼다.
Comments