전곡 κ³Όλͺ©/μœˆλ„μš° ν”„λ‘œκ·Έλž˜λ°

C# - κ³ κΈ‰ ν”„λ‘œκ·Έλž˜λ° (μŠ€λ ˆλ“œ)

CheonD 2020. 11. 27. 20:07

C# - κ³ κΈ‰ ν”„λ‘œκ·Έλž˜λ° (μŠ€λ ˆλ“œ)

 

μŠ€λ ˆλ“œ

- ν”„λ‘œκ·Έλž¨ 내뢀에 μžˆλŠ” μ œμ–΄μ˜ 단일 순차 흐름.

 

단일 μŠ€λ ˆλ“œ vs λ©€ν‹° μŠ€λ ˆλ“œ

 

- 단일 μŠ€λ ˆλ“œλŠ” νž™, κ³΅μœ λ°μ΄ν„°, μ½”λ“œ, μŠ€νƒ, λ ˆμ§€μŠ€ν„°κ°€ ν•˜λ‚˜λ§Œ μžˆλŠ” ꡬ쑰이고,

  λ©€ν‹° μŠ€λ ˆλ“œλŠ” νž™, κ³΅μœ λ°μ΄ν„°, μ½”λ“œ, λ ˆμ§€μŠ€ν„°λŠ” ν•˜λ‚˜μ§€λ§Œ, μŠ€νƒμ΄ μ—¬λŸ¬κ°œμ΄λ©° μƒνƒœμ •λ³΄κ°• μ—¬λŸ¬κ°œμΈ 것을 μ˜λ―Έν•œλ‹€.

 

μŠ€λ ˆλ“œ 예제

using System;
using System.Threading;


class SimpleThreadApp {
    static void ThreadBody()
    {
        for (int i =0; i<5; i++)
        {
            Console.WriteLine(DateTime.Now.Second+":" +i);
            Thread.Sleep(1000);
        }
    }

    public class Program
    {
        public static void Main(string[] args)
        {
            ThreadStart ts = new ThreadStart(ThreadBody);
            Thread t = new Thread(ts);
            Console.WriteLine("***Start of Main");
            t.Start();
            Console.WriteLine("***End of Main");
        }
    }

}

 

 

κ²°κ³Ό ν™”λ©΄

- Sleep은 μ§€μ •ν•œ μ‹œκ°„ λ™μ•ˆ 싀행을 λ©ˆμΆ”κ³  λŒ€κΈ° μƒνƒœλ‘œ κ°€λŠ” 것이닀. 1000이면 1μ΄ˆμ΄λ‹€.

- μŠ€λ ˆλ“œλŠ” λ°˜λ“œμ‹œ System.Threading을 ν•΄μ€˜μ•Όν•œλ‹€.

 

μŠ€λ ˆλ“œ 클래슀λ₯Ό ν†΅ν•΄μ„œ ν”„λ‘œνΌν‹°λ₯Ό μ΄μš©ν•  μˆ˜λ„ μžˆλ‹€.

 

κ·Έ μ€‘μ—μ„œλ„ Thread.Name은 맀우 μœ μš©ν•˜κ²Œ μ‚¬μš©λ˜λŠ” ν”„λ‘œνΌν‹° μ΄λ―€λ‘œ 예제λ₯Ό 톡해 λ‹€λ€„λ³΄μž.

 

using System;
using System.Threading;


class ThreadProperty {
    public void ThreadBody()
    {
        Thread myself = Thread.CurrentThread;
        for (int i = 1; i <= 3; i++)
        {
            Console.WriteLine("{0} is activated => {1}", myself.Name, i);
            Thread.Sleep(1000);
        }
    }
   }
    public class Program
    {
        public static void Main(string[] args)
        {
        ThreadProperty obj = new ThreadProperty();
        ThreadStart ts = new ThreadStart(obj.ThreadBody);
        Thread t1 = new Thread(ts);
        Thread t2 = new Thread(ts);
        t1.Name = "Apple"; t2.Name = "Orange";
        t1.Start(); t2.Start();
    }
    
}

 

κ²°κ³Ό ν™”λ©΄

 

μŠ€λ ˆλ“œμ˜ μƒνƒœλ₯Ό λ³€κ²½ν•˜λŠ” λ©”μ†Œλ“œλŠ”

Start, Sleep 뿐만 μ•„λ‹ˆλΌ Abort, Join, Suspend, Resume이 μžˆλ‹€.

Join은 ν•΄λ‹Ή μŠ€λ ˆλ“œμ˜ 싀행이 μ’…λ£Œλ  λ–„κΉŒμ§€ κΈ°λ‹€λ¦¬λŠ” λ©”μ†Œλ“œμ΄λ©°,

AbortλŠ” μŠ€λ ˆλ“œλ₯Ό μ’…λ£Œ,

SuspendλŠ” μŠ€λ ˆλ“œλ₯Ό λŒ€κΈ° μƒνƒœλ‘œ,

Resume은 λŒ€κΈ° μƒνƒœ μŠ€λ ˆλ“œλ₯Ό μ‹€ν–‰ μƒνƒœλ‘œ λ§Œλ“€μ–΄μ€€λ‹€.