언어(Language)/Java

[Java] 자바 스레드(Thread) 이름 조회 및 설정하기

잇트루 2022. 9. 29. 04:00
반응형

스레드 이름

메인 메서드의 소스 코드를 읽는 메인 스레드는 “main”이라는 이름을 가지고 있다.

추가적으로 생성한 스레드는 기본적으로 “Thread-n”이라는 이름을 가진다. (n은 0부터 스레드의 개수만큼 증가하여 명명)

이러한 스레드의 이름을 조회하거나 생성한 스레드의 이름을 설정할 수 있다.

 

스레드 이름 조회

스레드의 이름을 조회하는 방법은 다음과 같다.

// 스레드의 참조변수 이름.getName()
System.out.println(thread.getName());

 

스레드의 이름 조회 예제

public class ThreadName {
    public static void main(String[] args) {
        // Runnable 익명 구현 객체
        Thread thread1 = new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println("thread1 실행");
            }
        });
        thread1.start();
    
        // thread1 이름 조회
        System.out.println("이름: " + thread1.getName());

        // Thread 익명 하위 객체
        Thread thread2 = new Thread() {
            public void run() {
                System.out.println("thread2 실행");
            }
        };
        thread2.start();

        // thread2 이름 조회
        System.out.println("이름: " + thread2.getName());
    }
}
// 출력
thread1 실행
이름: Thread-0
thread2 실행
이름: Thread-1

 

스레드 이름 설정

스레드의 이름을 설정하는 방법은 다음과 같다.

// 스레드의 참조변수이름.setName("설정할 이름");
thread.setName("New Thread");

 

스레드 이름 설정 예제

public class ThreadName2 {
    public static void main(String[] args) {
        Thread thread = new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println("thread1 실행");
            }
        });
        thread.start();

        // thread 이름 조회
        System.out.println("이름: " + thread.getName());

        // thread 이름 설정
        thread.setName("New Thread");

        // 스레드 이름 다시 조회
        System.out.println("이름: " + thread.getName());
    }
}
// 출력
thread1 실행
이름: Thread-0
이름: New Thread

 

실행 중인 스레드 인스턴스의 주소 값 얻기

만약, 실행 중인 스레드의 주소 값을 사용해야 하는 상황이 발생한다면, Thread 클래스의 정적 메서드인 currentThread() 메서드를 사용하여 실행 중인 스레드의 주소 값을 얻는다.

public class ThreadEx3 {
    public static void main(String[] args) {
        Thread thread = new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println(Thread.currentThread().getName()); // Thread-0
            }
        });

        thread.start();
        System.out.println(Thread.currentThread().getName()); // main
    }
}
// 출력
main
Thread-0
반응형