티스토리 뷰

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
using System.Threading;
 
namespace mook_ThreadLife
{
    class Program
    {
        static void Main(string[] args)
        {
            Thread LifeThread = new Thread(DoStop);
            LifeThread.Start();
            for (int i = 0; i < 3; i++)
            {
                Console.WriteLine("주(기본) 스레드 카운터:{0}", i);
                Thread.Sleep(5);
            }
            LifeThread.Join();
            Console.WriteLine("스레드가 종료됩니다.");
        }
 
 
        private static void DoStop()
        {
            for (int i = 0; i < 10; i++)
            {
                Console.WriteLine("외부 스레드 카운터:{0}", i);
                Thread.Sleep(5);
            }
        }
 
    }
}
 
cs

 

 

ctrl + F5 실행 결과

 

 

결과를 보면 주 스레드는 당연히 모두 마치고 외부 스레드까지 마친후에 '스레드가 종료됩니다' 하고 출력되는데

 

 

C# 소스 21번째 라인의 LifeThread.Join(); 함수를 주석으로 막고 실행한 결과를 보면  외부스레드가 마치기도 전에 '스레드 종료됩니다' 가 출력되는 이유는 뭘까~ 알듯, 말듯,...

 

 

결론은

 

.Join();  함수는 실행된 작업자 스레드의 작업이 완료되었는지 확인하고(리소스를 정리할 수 있도록) 종료 된단다..

 

.Abort(); 함수는 스레드를 강제종료 (스레드 작업이 완료된 시점에서 정확히 사용해야 한다)

 

그래도 알듯 말듯...


 

 

[참고도서]

C#으로 배우는 네트워크 프로그래밍 - 8점
조호묵.이정호 지음/가메출판사