Computer >> 컴퓨터 >  >> 프로그래밍 >> C#

C# Thread.CurrentThread 속성 – 현재 실행 중인 스레드 확인하기

C#의 Thread.CurrentThread 속성은 프로그램에서 현재 실행 중인 스레드(Thread) 객체를 가져오는 데 사용되는 정적(static) 속성입니다. 이 속성을 활용하면 현재 스레드의 이름, 실행 상태, 관리 스레드 ID 등 다양한 정보를 조회하거나 설정할 수 있어 멀티스레딩 환경에서 디버깅과 로깅 작업에 매우 유용합니다.

구문(Syntax)

Thread.CurrentThread 속성의 기본 구문은 다음과 같습니다.

public static System.Threading.Thread CurrentThread { get; }

읽기 전용(get) 속성으로, 별도의 매개변수 없이 호출하는 즉시 현재 실행 중인 스레드 인스턴스를 반환합니다.

예제 1

다음 예제는 Thread.CurrentThread 속성을 사용해 현재 스레드의 이름과 상태, 그리고 관리 스레드 ID(ManagedThreadId)를 출력하는 방법을 보여줍니다. 또한 스레드 풀(Thread Pool)에서 실행되는 작업이 실제로 스레드 풀에 속한 스레드인지 확인하는 코드도 포함되어 있습니다.

using System;
using System.Threading;
public class Demo {
    public static void Main() {
        Thread thread = new Thread(new ThreadStart(demo1));
        ThreadPool.QueueUserWorkItem(new WaitCallback(demo2));
        thread = Thread.CurrentThread;
        thread.Name = "Demo Thread";
        Console.WriteLine("Current running Thread = " + thread.Name);
        Console.WriteLine("Current state of Thread = " + thread.ThreadState);
        Console.WriteLine("ManagedThreadId = " + thread.ManagedThreadId);
    }
    public static void demo1() {
        Thread.Sleep(2000);
    }
    public static void demo2(object stateInfo) {
        Console.WriteLine("Thread belongs to managed thread pool? = " + Thread.CurrentThread.IsThreadPoolThread);
    }
}

출력 결과

위 코드를 실행하면 다음과 같은 결과가 출력됩니다.

Current running Thread = Demo Thread
Current state of Thread = Running
ManagedThreadId = 20
Thread belongs to managed thread pool? = True

예제 2

이번에는 Thread.CurrentThread 속성을 문자열 포맷팅과 함께 활용하여 스레드 ID를 직접 출력하는 예제입니다. 두 가지 방식 모두 동일한 ManagedThreadId 값을 반환한다는 점을 확인할 수 있습니다.

using System;
using System.Threading;
public class Demo {
    public static void Main() {
        Thread thread = new Thread(new ThreadStart(demo1));
        ThreadPool.QueueUserWorkItem(new WaitCallback(demo2));
        thread = Thread.CurrentThread;
        thread.Name = "Demo Thread";
        Console.WriteLine("Current running Thread = " + thread.Name);
        Console.WriteLine("Current state of Thread = " + thread.ThreadState);
        Console.WriteLine("ManagedThreadId = " + thread.ManagedThreadId);
        Console.WriteLine("Thread Id: {0}", Thread.CurrentThread.ManagedThreadId);
    }
    public static void demo1() {
        Thread.Sleep(2000);
    }
    public static void demo2(object stateInfo) {
        Console.WriteLine("Thread belongs to managed thread pool? = " + Thread.CurrentThread.IsThreadPoolThread);
    }
}

출력 결과

위 코드를 실행하면 다음과 같은 결과가 출력됩니다.

Current running Thread = Demo Thread
Current state of Thread = Running
ManagedThreadId = 29
Thread Id: 29
Thread belongs to managed thread pool? = True

주요 속성 정리

  • Name: 스레드의 이름을 설정하거나 조회합니다.
  • ThreadState: 스레드의 현재 실행 상태(Running, Suspended 등)를 나타냅니다.
  • ManagedThreadId: .NET 런타임이 부여하는 스레드의 고유 식별자입니다.
  • IsThreadPoolThread: 해당 스레드가 관리 스레드 풀에 속해 있는지 여부를 boolean 값으로 반환합니다.

참고로 ManagedThreadId 값은 실행 시점마다 달라질 수 있으며, ThreadPool에서 실행된 작업은 IsThreadPoolThread 값이 항상 True로 반환됩니다.