C# thread

C#μ—μ„œ ThreadλŠ” 메인 ν•¨μˆ˜(ν”„λ‘œκ·Έλž¨ μ§„μž…μ )κ°€ λλ‚˜λ„ 싀행을 계속할지 μ—¬λΆ€κ°€ μŠ€λ ˆλ“œμ˜ μ’…λ₯˜μ— 따라 λ‹¬λΌμ§‘λ‹ˆλ‹€.

μŠ€λ ˆλ“œμ—λŠ” 두 κ°€μ§€ μ’…λ₯˜κ°€ μžˆμŠ΅λ‹ˆλ‹€:

  1. ν¬κ·ΈλΌμš΄λ“œ μŠ€λ ˆλ“œ (Foreground Thread)
  2. λ°±κ·ΈλΌμš΄λ“œ μŠ€λ ˆλ“œ (Background Thread)

1. ν¬κ·ΈλΌμš΄λ“œ μŠ€λ ˆλ“œ (Foreground Thread)

  • 기본적으둜 μƒμ„±λœ μŠ€λ ˆλ“œλŠ” ν¬κ·ΈλΌμš΄λ“œ μŠ€λ ˆλ“œμž…λ‹ˆλ‹€.
  • ν¬κ·ΈλΌμš΄λ“œ μŠ€λ ˆλ“œλŠ” 메인 ν•¨μˆ˜κ°€ μ’…λ£Œλ˜λ”λΌλ„ μŠ€λ ˆλ“œκ°€ λͺ¨λ‘ μ’…λ£Œλ  λ•ŒκΉŒμ§€ ν”„λ‘œκ·Έλž¨μ΄ 계속 μ‹€ν–‰λ©λ‹ˆλ‹€.

예제 μ½”λ“œ:

using System;
using System.Threading;

class Program
{
    static void Main()
    {
        Thread thread = new Thread(() =>
        {
            for (int i = 0; i < 10; i++)
            {
                Console.WriteLine($"μŠ€λ ˆλ“œ μ‹€ν–‰ 쀑: {i}");
                Thread.Sleep(1000);
            }
        });

        thread.Start();

        Console.WriteLine("메인 ν•¨μˆ˜ μ’…λ£Œ");
    }
}

좜λ ₯:

메인 ν•¨μˆ˜ μ’…λ£Œ
μŠ€λ ˆλ“œ μ‹€ν–‰ 쀑: 0
μŠ€λ ˆλ“œ μ‹€ν–‰ 쀑: 1
μŠ€λ ˆλ“œ μ‹€ν–‰ 쀑: 2
...
  • 메인 ν•¨μˆ˜κ°€ λ¨Όμ € μ’…λ£Œλ˜μ§€λ§Œ, μŠ€λ ˆλ“œλŠ” 계속 μ‹€ν–‰λ©λ‹ˆλ‹€.
  • 이유: threadλŠ” ν¬κ·ΈλΌμš΄λ“œ μŠ€λ ˆλ“œμ΄κΈ° λ•Œλ¬Έμ— ν”„λ‘œκ·Έλž¨μ΄ μ’…λ£Œλ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

2. λ°±κ·ΈλΌμš΄λ“œ μŠ€λ ˆλ“œ (Background Thread)

  • λ°±κ·ΈλΌμš΄λ“œ μŠ€λ ˆλ“œλŠ” 메인 ν•¨μˆ˜ μ’…λ£Œ μ‹œ μ¦‰μ‹œ μ€‘λ‹¨λ©λ‹ˆλ‹€.
  • 메인 μŠ€λ ˆλ“œκ°€ μ’…λ£Œλ˜λ©΄, λͺ¨λ“  λ°±κ·ΈλΌμš΄λ“œ μŠ€λ ˆλ“œλ„ μ’…λ£Œλ©λ‹ˆλ‹€.

λ°±κ·ΈλΌμš΄λ“œ μŠ€λ ˆλ“œ μ„€μ • 예제:

using System;
using System.Threading;

class Program
{
    static void Main()
    {
        Thread thread = new Thread(() =>
        {
            for (int i = 0; i < 10; i++)
            {
                Console.WriteLine($"μŠ€λ ˆλ“œ μ‹€ν–‰ 쀑: {i}");
                Thread.Sleep(1000);
            }
        });

        thread.IsBackground = true; // λ°±κ·ΈλΌμš΄λ“œ μŠ€λ ˆλ“œλ‘œ μ„€μ •
        thread.Start();

        Console.WriteLine("메인 ν•¨μˆ˜ μ’…λ£Œ");
    }
}

좜λ ₯:

메인 ν•¨μˆ˜ μ’…λ£Œ
  • 메인 ν•¨μˆ˜ μ’…λ£Œμ™€ ν•¨κ»˜ λ°±κ·ΈλΌμš΄λ“œ μŠ€λ ˆλ“œλ„ μ’…λ£Œλ©λ‹ˆλ‹€.
  • 이유: IsBackground = true둜 μ„€μ •ν–ˆκΈ° λ•Œλ¬Έμ— λ°±κ·ΈλΌμš΄λ“œ μŠ€λ ˆλ“œλŠ” 메인 μŠ€λ ˆλ“œ μ’…λ£Œ μ‹œ κ°•μ œ μ’…λ£Œλ©λ‹ˆλ‹€.

정리

  • 기본적으둜 ThreadλŠ” ν¬κ·ΈλΌμš΄λ“œ μŠ€λ ˆλ“œλ‘œ μƒμ„±λ˜λ©°, 메인 ν•¨μˆ˜κ°€ μ’…λ£Œλ˜μ–΄λ„ 계속 μ‹€ν–‰λ©λ‹ˆλ‹€.
  • μŠ€λ ˆλ“œλ₯Ό λ°±κ·ΈλΌμš΄λ“œ μŠ€λ ˆλ“œλ‘œ μ„€μ •ν•˜λ €λ©΄ IsBackground = trueλ₯Ό μ„€μ •ν•΄μ•Ό ν•©λ‹ˆλ‹€.
  • ν¬κ·ΈλΌμš΄λ“œ μŠ€λ ˆλ“œ: 메인 μŠ€λ ˆλ“œ μ’…λ£Œ 후에도 싀행됨.
  • λ°±κ·ΈλΌμš΄λ“œ μŠ€λ ˆλ“œ: 메인 μŠ€λ ˆλ“œ μ’…λ£Œ μ‹œ ν•¨κ»˜ μ’…λ£Œλ¨.