- 스레드의 속성
- Name : 스레드의 명칭 지정
- IsAlive : bool형 스레드가 살아있는지 죽었는지 확인
- IsBackground
- foreground : 주 스레드의 종료와 상관없이 독립적으로 작동하는 부 스레드
- background : 주 스레드의 종료와 연계하여 같이 종료하는 부 스레드
- public bool IsBackground {get; set; }
- CurrentThread
기본 예제
namespace Thread_EX
{
class Program
{
static void func()
{
int i = 0;
while (true)
{
Console.Write($"{i++} ");
Thread.Sleep(1000);
}
}
static void Main(string[] args)
{
Thread thread = new Thread(new ThreadStart(func));
thread.Start();
Console.WriteLine("Main 종료");
}
}
}
결과 값
main 스레드 가 종료되고 수가 계속 증가 하는 걸 볼 수 있다
그렇다면 위의 코드를 가지고 기본 속성을 다뤄 보자
IsBackground = true 사용
namespace Thread_EX
{
class Program
{
static void func()
{
int i = 0;
while (true)
{
Console.Write($"{i++} ");
Thread.Sleep(1000);
}
}
static void Main(string[] args)
{
Thread thread = new Thread(new ThreadStart(func));
thread.IsBackground = true;
thread.Start();
Console.WriteLine("Main 종료");
}
}
}
결과 값
IsBackground는 기본 값이 fales 이다
IsBackground = true 로 설정을 하게 되면 백 그라운드 스레드로 설정하겠다는 뜻이고 메인 스레드 가 종료되면 백 그라운드 스레드가 작업하던 수의 증가 출력을 상관없이 종료 시킨다
IsBackground 가 false 인 경우는 맨 처음 예제와 같이 메인 함수가 종료되어도 스레드는 종료 되지 않는다
CurrentThread
public static Thread CurrendThread{get;}
스레드는 독립된 아이디를 가진다
Thread.CurrentThread.GetHashCode()
namespace Thread_EX
{
class Program
{
static void ThreadProc()
{
Console.WriteLine($"스레드 ID{Thread.CurrentThread.GetHashCode()}");
}
static void Main(string[] args)
{
Thread thread = new Thread(ThreadProc);
thread.Start();
Console.WriteLine($"메인 스레드 ID{Thread.CurrentThread.GetHashCode()}");
}
}
}
값
스레드 메서드
- Start();
- Join(); 스레드가 종료 될 때 까지 대기
namespace Thread_EX
{
class Program
{
static void ThreadProc()
{
for (int i = 0; i < 10; i++)
{
Console.Write($"{i}");
Thread.Sleep( 200 );
}
}
static void Main(string[] args)
{
Thread thread = new Thread(new ThreadStart(ThreadProc));
thread.Start();
thread.Join(); // 위에 부 스레드가 끝날때 까지 메인종료 메세지( 주 스레드 ) 대기시킴
Console.WriteLine("메인 종료");
}
}
}
값
- Abort();
- 이 함수를 호출한 곳의 현재 스레드를 중지
- ThreadAbortException 예외 발생 try catch문 필요
- CurrentThread.Abort();
namespace Thread_EX
{
class Program
{
static void Main(string[] args)
{
Thread th = new Thread(new ThreadStart(ThreadProc1));
th.Start();
Console.WriteLine($"Main 스레드 : {Thread.CurrentThread.GetHashCode}");
Console.WriteLine("Main 종료");
}
private static void ThreadProc1()
{
Console.WriteLine($"ThreadProc1 아이디 : {Thread.CurrentThread.GetHashCode()}");
Thread thread = new Thread(new ThreadStart(ThreadProc2));
thread.Start();
for (int i = 0; i < 10; i++)
{
Console.WriteLine($"{i * 10}");
Thread.Sleep(200);
if (i == 3)
{
Console.WriteLine("ThreadProc1 종료");
Thread.CurrentThread.Abort();
}
}
}
private static void ThreadProc2()
{
Console.WriteLine($"ThreadProc2 아이디 : {Thread.CurrentThread.GetHashCode()}");
for (int i = 0; i < 10; i++)
{
Console.WriteLine($"{i}");
Thread.Sleep(200);
}
Console.WriteLine("ThreadProc2 종료");
}
}
}
값
Abort() 를 사용 하면 스레드를 특정 부분에서 정지할 수 있다
- 스레드의 속성
- Name : 스레드의 명칭 지정
- IsAlive : bool형 스레드가 살아있는지 죽었는지 확인
- IsBackground
- foreground : 주 스레드의 종료와 상관없이 독립적으로 작동하는 부 스레드
- background : 주 스레드의 종료와 연계하여 같이 종료하는 부 스레드
- public bool IsBackground {get; set; }
- CurrentThread
기본 예제
namespace Thread_EX
{
class Program
{
static void func()
{
int i = 0;
while (true)
{
Console.Write($"{i++} ");
Thread.Sleep(1000);
}
}
static void Main(string[] args)
{
Thread thread = new Thread(new ThreadStart(func));
thread.Start();
Console.WriteLine("Main 종료");
}
}
}
결과 값
main 스레드 가 종료되고 수가 계속 증가 하는 걸 볼 수 있다
그렇다면 위의 코드를 가지고 기본 속성을 다뤄 보자
IsBackground = true 사용
namespace Thread_EX
{
class Program
{
static void func()
{
int i = 0;
while (true)
{
Console.Write($"{i++} ");
Thread.Sleep(1000);
}
}
static void Main(string[] args)
{
Thread thread = new Thread(new ThreadStart(func));
thread.IsBackground = true;
thread.Start();
Console.WriteLine("Main 종료");
}
}
}
결과 값
IsBackground는 기본 값이 fales 이다
IsBackground = true 로 설정을 하게 되면 백 그라운드 스레드로 설정하겠다는 뜻이고 메인 스레드 가 종료되면 백 그라운드 스레드가 작업하던 수의 증가 출력을 상관없이 종료 시킨다
IsBackground 가 false 인 경우는 맨 처음 예제와 같이 메인 함수가 종료되어도 스레드는 종료 되지 않는다
CurrentThread
public static Thread CurrendThread{get;}
스레드는 독립된 아이디를 가진다
Thread.CurrentThread.GetHashCode()
namespace Thread_EX
{
class Program
{
static void ThreadProc()
{
Console.WriteLine($"스레드 ID{Thread.CurrentThread.GetHashCode()}");
}
static void Main(string[] args)
{
Thread thread = new Thread(ThreadProc);
thread.Start();
Console.WriteLine($"메인 스레드 ID{Thread.CurrentThread.GetHashCode()}");
}
}
}
값
스레드 메서드
- Start();
- Join(); 스레드가 종료 될 때 까지 대기
namespace Thread_EX
{
class Program
{
static void ThreadProc()
{
for (int i = 0; i < 10; i++)
{
Console.Write($"{i}");
Thread.Sleep( 200 );
}
}
static void Main(string[] args)
{
Thread thread = new Thread(new ThreadStart(ThreadProc));
thread.Start();
thread.Join(); // 위에 부 스레드가 끝날때 까지 메인종료 메세지( 주 스레드 ) 대기시킴
Console.WriteLine("메인 종료");
}
}
}
값
- Abort();
- 이 함수를 호출한 곳의 현재 스레드를 중지
- ThreadAbortException 예외 발생 try catch문 필요
- CurrentThread.Abort();
namespace Thread_EX
{
class Program
{
static void Main(string[] args)
{
Thread th = new Thread(new ThreadStart(ThreadProc1));
th.Start();
Console.WriteLine($"Main 스레드 : {Thread.CurrentThread.GetHashCode}");
Console.WriteLine("Main 종료");
}
private static void ThreadProc1()
{
Console.WriteLine($"ThreadProc1 아이디 : {Thread.CurrentThread.GetHashCode()}");
Thread thread = new Thread(new ThreadStart(ThreadProc2));
thread.Start();
for (int i = 0; i < 10; i++)
{
Console.WriteLine($"{i * 10}");
Thread.Sleep(200);
if (i == 3)
{
Console.WriteLine("ThreadProc1 종료");
Thread.CurrentThread.Abort();
}
}
}
private static void ThreadProc2()
{
Console.WriteLine($"ThreadProc2 아이디 : {Thread.CurrentThread.GetHashCode()}");
for (int i = 0; i < 10; i++)
{
Console.WriteLine($"{i}");
Thread.Sleep(200);
}
Console.WriteLine("ThreadProc2 종료");
}
}
}
값
Abort() 를 사용 하면 스레드를 특정 부분에서 정지할 수 있다
- 스레드의 속성
- Name : 스레드의 명칭 지정
- IsAlive : bool형 스레드가 살아있는지 죽었는지 확인
- IsBackground
- foreground : 주 스레드의 종료와 상관없이 독립적으로 작동하는 부 스레드
- background : 주 스레드의 종료와 연계하여 같이 종료하는 부 스레드
- public bool IsBackground {get; set; }
- CurrentThread
기본 예제
namespace Thread_EX
{
class Program
{
static void func()
{
int i = 0;
while (true)
{
Console.Write($"{i++} ");
Thread.Sleep(1000);
}
}
static void Main(string[] args)
{
Thread thread = new Thread(new ThreadStart(func));
thread.Start();
Console.WriteLine("Main 종료");
}
}
}
결과 값
main 스레드 가 종료되고 수가 계속 증가 하는 걸 볼 수 있다
그렇다면 위의 코드를 가지고 기본 속성을 다뤄 보자
IsBackground = true 사용
namespace Thread_EX
{
class Program
{
static void func()
{
int i = 0;
while (true)
{
Console.Write($"{i++} ");
Thread.Sleep(1000);
}
}
static void Main(string[] args)
{
Thread thread = new Thread(new ThreadStart(func));
thread.IsBackground = true;
thread.Start();
Console.WriteLine("Main 종료");
}
}
}
결과 값
IsBackground는 기본 값이 fales 이다
IsBackground = true 로 설정을 하게 되면 백 그라운드 스레드로 설정하겠다는 뜻이고 메인 스레드 가 종료되면 백 그라운드 스레드가 작업하던 수의 증가 출력을 상관없이 종료 시킨다
IsBackground 가 false 인 경우는 맨 처음 예제와 같이 메인 함수가 종료되어도 스레드는 종료 되지 않는다
CurrentThread
public static Thread CurrendThread{get;}
스레드는 독립된 아이디를 가진다
Thread.CurrentThread.GetHashCode()
namespace Thread_EX
{
class Program
{
static void ThreadProc()
{
Console.WriteLine($"스레드 ID{Thread.CurrentThread.GetHashCode()}");
}
static void Main(string[] args)
{
Thread thread = new Thread(ThreadProc);
thread.Start();
Console.WriteLine($"메인 스레드 ID{Thread.CurrentThread.GetHashCode()}");
}
}
}
값
스레드 메서드
- Start();
- Join(); 스레드가 종료 될 때 까지 대기
namespace Thread_EX
{
class Program
{
static void ThreadProc()
{
for (int i = 0; i < 10; i++)
{
Console.Write($"{i}");
Thread.Sleep( 200 );
}
}
static void Main(string[] args)
{
Thread thread = new Thread(new ThreadStart(ThreadProc));
thread.Start();
thread.Join(); // 위에 부 스레드가 끝날때 까지 메인종료 메세지( 주 스레드 ) 대기시킴
Console.WriteLine("메인 종료");
}
}
}
값
- Abort();
- 이 함수를 호출한 곳의 현재 스레드를 중지
- ThreadAbortException 예외 발생 try catch문 필요
- CurrentThread.Abort();
namespace Thread_EX
{
class Program
{
static void Main(string[] args)
{
Thread th = new Thread(new ThreadStart(ThreadProc1));
th.Start();
Console.WriteLine($"Main 스레드 : {Thread.CurrentThread.GetHashCode}");
Console.WriteLine("Main 종료");
}
private static void ThreadProc1()
{
Console.WriteLine($"ThreadProc1 아이디 : {Thread.CurrentThread.GetHashCode()}");
Thread thread = new Thread(new ThreadStart(ThreadProc2));
thread.Start();
for (int i = 0; i < 10; i++)
{
Console.WriteLine($"{i * 10}");
Thread.Sleep(200);
if (i == 3)
{
Console.WriteLine("ThreadProc1 종료");
Thread.CurrentThread.Abort();
}
}
}
private static void ThreadProc2()
{
Console.WriteLine($"ThreadProc2 아이디 : {Thread.CurrentThread.GetHashCode()}");
for (int i = 0; i < 10; i++)
{
Console.WriteLine($"{i}");
Thread.Sleep(200);
}
Console.WriteLine("ThreadProc2 종료");
}
}
}
값
Abort() 를 사용 하면 스레드를 특정 부분에서 정지할 수 있다
- 스레드의 속성
- Name : 스레드의 명칭 지정
- IsAlive : bool형 스레드가 살아있는지 죽었는지 확인
- IsBackground
- foreground : 주 스레드의 종료와 상관없이 독립적으로 작동하는 부 스레드
- background : 주 스레드의 종료와 연계하여 같이 종료하는 부 스레드
- public bool IsBackground {get; set; }
- CurrentThread
기본 예제
namespace Thread_EX
{
class Program
{
static void func()
{
int i = 0;
while (true)
{
Console.Write($"{i++} ");
Thread.Sleep(1000);
}
}
static void Main(string[] args)
{
Thread thread = new Thread(new ThreadStart(func));
thread.Start();
Console.WriteLine("Main 종료");
}
}
}
결과 값
main 스레드 가 종료되고 수가 계속 증가 하는 걸 볼 수 있다
그렇다면 위의 코드를 가지고 기본 속성을 다뤄 보자
IsBackground = true 사용
namespace Thread_EX
{
class Program
{
static void func()
{
int i = 0;
while (true)
{
Console.Write($"{i++} ");
Thread.Sleep(1000);
}
}
static void Main(string[] args)
{
Thread thread = new Thread(new ThreadStart(func));
thread.IsBackground = true;
thread.Start();
Console.WriteLine("Main 종료");
}
}
}
결과 값
IsBackground는 기본 값이 fales 이다
IsBackground = true 로 설정을 하게 되면 백 그라운드 스레드로 설정하겠다는 뜻이고 메인 스레드 가 종료되면 백 그라운드 스레드가 작업하던 수의 증가 출력을 상관없이 종료 시킨다
IsBackground 가 false 인 경우는 맨 처음 예제와 같이 메인 함수가 종료되어도 스레드는 종료 되지 않는다
CurrentThread
public static Thread CurrendThread{get;}
스레드는 독립된 아이디를 가진다
Thread.CurrentThread.GetHashCode()
namespace Thread_EX
{
class Program
{
static void ThreadProc()
{
Console.WriteLine($"스레드 ID{Thread.CurrentThread.GetHashCode()}");
}
static void Main(string[] args)
{
Thread thread = new Thread(ThreadProc);
thread.Start();
Console.WriteLine($"메인 스레드 ID{Thread.CurrentThread.GetHashCode()}");
}
}
}
값
스레드 메서드
- Start();
- Join(); 스레드가 종료 될 때 까지 대기
namespace Thread_EX
{
class Program
{
static void ThreadProc()
{
for (int i = 0; i < 10; i++)
{
Console.Write($"{i}");
Thread.Sleep( 200 );
}
}
static void Main(string[] args)
{
Thread thread = new Thread(new ThreadStart(ThreadProc));
thread.Start();
thread.Join(); // 위에 부 스레드가 끝날때 까지 메인종료 메세지( 주 스레드 ) 대기시킴
Console.WriteLine("메인 종료");
}
}
}
값
- Abort();
- 이 함수를 호출한 곳의 현재 스레드를 중지
- ThreadAbortException 예외 발생 try catch문 필요
- CurrentThread.Abort();
namespace Thread_EX
{
class Program
{
static void Main(string[] args)
{
Thread th = new Thread(new ThreadStart(ThreadProc1));
th.Start();
Console.WriteLine($"Main 스레드 : {Thread.CurrentThread.GetHashCode}");
Console.WriteLine("Main 종료");
}
private static void ThreadProc1()
{
Console.WriteLine($"ThreadProc1 아이디 : {Thread.CurrentThread.GetHashCode()}");
Thread thread = new Thread(new ThreadStart(ThreadProc2));
thread.Start();
for (int i = 0; i < 10; i++)
{
Console.WriteLine($"{i * 10}");
Thread.Sleep(200);
if (i == 3)
{
Console.WriteLine("ThreadProc1 종료");
Thread.CurrentThread.Abort();
}
}
}
private static void ThreadProc2()
{
Console.WriteLine($"ThreadProc2 아이디 : {Thread.CurrentThread.GetHashCode()}");
for (int i = 0; i < 10; i++)
{
Console.WriteLine($"{i}");
Thread.Sleep(200);
}
Console.WriteLine("ThreadProc2 종료");
}
}
}
값
Abort() 를 사용 하면 스레드를 특정 부분에서 정지할 수 있다
- 스레드의 속성
- Name : 스레드의 명칭 지정
- IsAlive : bool형 스레드가 살아있는지 죽었는지 확인
- IsBackground
- foreground : 주 스레드의 종료와 상관없이 독립적으로 작동하는 부 스레드
- background : 주 스레드의 종료와 연계하여 같이 종료하는 부 스레드
- public bool IsBackground {get; set; }
- CurrentThread
기본 예제
namespace Thread_EX
{
class Program
{
static void func()
{
int i = 0;
while (true)
{
Console.Write($"{i++} ");
Thread.Sleep(1000);
}
}
static void Main(string[] args)
{
Thread thread = new Thread(new ThreadStart(func));
thread.Start();
Console.WriteLine("Main 종료");
}
}
}
결과 값
main 스레드 가 종료되고 수가 계속 증가 하는 걸 볼 수 있다
그렇다면 위의 코드를 가지고 기본 속성을 다뤄 보자
IsBackground = true 사용
namespace Thread_EX
{
class Program
{
static void func()
{
int i = 0;
while (true)
{
Console.Write($"{i++} ");
Thread.Sleep(1000);
}
}
static void Main(string[] args)
{
Thread thread = new Thread(new ThreadStart(func));
thread.IsBackground = true;
thread.Start();
Console.WriteLine("Main 종료");
}
}
}
결과 값
IsBackground는 기본 값이 fales 이다
IsBackground = true 로 설정을 하게 되면 백 그라운드 스레드로 설정하겠다는 뜻이고 메인 스레드 가 종료되면 백 그라운드 스레드가 작업하던 수의 증가 출력을 상관없이 종료 시킨다
IsBackground 가 false 인 경우는 맨 처음 예제와 같이 메인 함수가 종료되어도 스레드는 종료 되지 않는다
CurrentThread
public static Thread CurrendThread{get;}
스레드는 독립된 아이디를 가진다
Thread.CurrentThread.GetHashCode()
namespace Thread_EX
{
class Program
{
static void ThreadProc()
{
Console.WriteLine($"스레드 ID{Thread.CurrentThread.GetHashCode()}");
}
static void Main(string[] args)
{
Thread thread = new Thread(ThreadProc);
thread.Start();
Console.WriteLine($"메인 스레드 ID{Thread.CurrentThread.GetHashCode()}");
}
}
}
값
스레드 메서드
- Start();
- Join(); 스레드가 종료 될 때 까지 대기
namespace Thread_EX
{
class Program
{
static void ThreadProc()
{
for (int i = 0; i < 10; i++)
{
Console.Write($"{i}");
Thread.Sleep( 200 );
}
}
static void Main(string[] args)
{
Thread thread = new Thread(new ThreadStart(ThreadProc));
thread.Start();
thread.Join(); // 위에 부 스레드가 끝날때 까지 메인종료 메세지( 주 스레드 ) 대기시킴
Console.WriteLine("메인 종료");
}
}
}
값
- Abort();
- 이 함수를 호출한 곳의 현재 스레드를 중지
- ThreadAbortException 예외 발생 try catch문 필요
- CurrentThread.Abort();
namespace Thread_EX
{
class Program
{
static void Main(string[] args)
{
Thread th = new Thread(new ThreadStart(ThreadProc1));
th.Start();
Console.WriteLine($"Main 스레드 : {Thread.CurrentThread.GetHashCode}");
Console.WriteLine("Main 종료");
}
private static void ThreadProc1()
{
Console.WriteLine($"ThreadProc1 아이디 : {Thread.CurrentThread.GetHashCode()}");
Thread thread = new Thread(new ThreadStart(ThreadProc2));
thread.Start();
for (int i = 0; i < 10; i++)
{
Console.WriteLine($"{i * 10}");
Thread.Sleep(200);
if (i == 3)
{
Console.WriteLine("ThreadProc1 종료");
Thread.CurrentThread.Abort();
}
}
}
private static void ThreadProc2()
{
Console.WriteLine($"ThreadProc2 아이디 : {Thread.CurrentThread.GetHashCode()}");
for (int i = 0; i < 10; i++)
{
Console.WriteLine($"{i}");
Thread.Sleep(200);
}
Console.WriteLine("ThreadProc2 종료");
}
}
}
값
Abort() 를 사용 하면 스레드를 특정 부분에서 정지할 수 있다