728x90
반응형
1. Thread 클래스 멤버
using System;
using System.Threading;
class Program {
public static void F1() {
Console.WriteLine("F1 Start");
Thread.Sleep(1000);
Console.WriteLine("F1 End");
}
public static void Main() {
Thread t1 = new Tread(F1);
t1.Start();
Console.WriteLine($"{t1.ManagedThreadID}");
Console.WriteLine($"{t1.Priority}");
Console.WriteLine($"{t1.IsThreadPoolThread}");
Console.WriteLine($"{t1.IsAlive}");
}
}
이번엔 스레드 클래스의 멤버에 대해 알아보자.
① Thread.ManagedThreadID
=> 스레드의 고유한 ID 값
② Thread.Priority
=> 스레드의 우선순위
=> 특별한 설정을 하지 않는 경우 Normal
③ Thread.IsThreadPoolThread
=> 현재 스레드가 스레드 풀에 있는 것이냐 조사
=> task로 만들었느냐 아니냐 조사
④ Thread.IsAlive
=> 현재 살아있는지 ( 동작중인지 )
using System;
using System.Threading;
class Program {
public static void F1() {
Console.WriteLine("F1 Start");
Thread.Sleep(1000);
Console.WriteLine("F1 End");
}
public static void Main() {
Thread t1 = new Tread(F1);
t1.Start();
Console.WriteLine($"{t1.ManagedThreadID}");
Console.WriteLine($"{t1.Priority}");
Console.WriteLine($"{t1.IsThreadPoolThread}");
Console.WriteLine($"{t1.IsAlive}");
t1.IsBackGround = true;
t1.Join();
}
}
그 다음은 IsBackGround이다.
생각해볼게 위의 코드는 주 스레드가 먼저 끝나게 되고
새로 만든 스레드가 나중에 끝나게 된다.
이 때, 주 스레드가 끝나면 다른 스레드도 끝낼지, 다른 스레드의 동작이 끝날때까지 대기할지 정해야 한다.
이 때, IsBackGround를 따로 설정하지 않으면 끝날때까지 대기한다.
하지만 IsBackGround를 true로 놓게 되면 주스레드가 끝나면 다른 스레드도 강제로 죽게된다.
① ForeGround 스레드 : 주스레드가 종료 되어도 계속 작업 수행
② BackGround 스레드 : 주스레드가 종료 되면 강제 종료
③ Thread.Join()
=> 주스레드가 종료되어도 대기
using System;
using System.Threading;
class Program {
public static void F1() {
Thread t = Thread.CurrentThread;
Console.WriteLine("F1 : "+t.ManagedThreadID);
Console.WriteLine("F1 Start");
Thread.Sleep(1000);
Console.WriteLine("F1 End");
}
public static void Main() {
Thread t1 = new Tread(F1);
t1.Start();
Console.WriteLine($"{t1.ManagedThreadID}");
Console.WriteLine($"{t1.Priority}");
Console.WriteLine($"{t1.IsThreadPoolThread}");
Console.WriteLine($"{t1.IsAlive}");
t1.IsBackGround = true;
}
}
마지막으로 메소드 내부에서도 자신의 ID값을 출력하고 싶다면
Thread가 가지고 있는 속성 중 CurrentThread가 있다.
이것을 이용하면 메소드 내부에서도 자신의 ID값을 출력할 수 있다.
728x90
반응형
'프로그래밍 > C#' 카테고리의 다른 글
[C#] Dispose() 메소드 (0) | 2020.05.11 |
---|---|
[C#] Task 클래스 (0) | 2020.05.10 |
[C#] 스레드 개념 (Thread) (0) | 2020.05.08 |
[C#] Fluent vs Query (LINQ Fluent vs Query Syntax) (0) | 2020.05.07 |
[C#] LINQ 원리 (0) | 2020.05.07 |