본문 바로가기

Programming/JAVA

멀티 스레드(2) - 작업 스레드 개념 : 스레드 이름 설정/호출

JAVA logo image

 

 

 

우리가 사용하게 되는 스레드(메인, 작업 스레드)들은 각각 이름을 갖습니다. 이름 자체가 클래스나 메서드처럼 아주 중요한 역할까지 하는 것은 아니지만, 디버깅 과정이라든지 여러 방면에서 작업을 어떻게 진행하는지 확인하는 목적으로 사용되기도 합니다. 

 

기본적으로 메인스레드는 "main"이며, 우리가 생성하는 작업 스레드는 "Thread-n"(n은 스레드 번호)이라는 이름을 갖게됩니다. 여기서 Thread-n 대신에 다른 이름을 설정하고 싶다면 Thread 클래스의 메서드 setName( ), 그리고 getName( )을 사용하면 됩니다. 

 

thread.setName("thread name");
thread.getName();

 

 

setName( )과 getName( )은 Thread의 인스턴스 메서드이므로, 스레드 객체의 참조가 필요합니다. 만일 위의 예제에서 사용된 thread와 같은 스레드 객체 참조가 없는 상황이라면, currentThread( )를 사용합니다. currentThread( )는 static 메서드이고 코드를 현재 실행하고 있는 스레드의 참조를 얻을 수 있습니다. 

 

Thread thread = Thread.currentThread();

 

 

아래에서 예제를 살펴보겠습니다. 

 

 

 

 


 

// ThreadA.java
public class ThreadA extends Thread {
	public ThreadA() {
		setName("ThreadA");
	}
	
	public void run() {
		for(int i=0; i<2; i++) {
			System.out.println(getName() + "가 출력한 내용");
		}
	}
	
}

 

// ThreadB.java
public class ThreadB extends Thread{
	public void run() {
		for(int i=0; i<2; i++) {
			System.out.println(getName() + "가 출력한 내용");
		}
	}
}

 

// MainExample.java
import java.awt.Toolkit;

public class ExampleMain {
	public static void main(String[] args) {
		// 현재 실행중인 스레드의 객체 획득
		Thread mainThread = Thread.currentThread();
		System.out.println("프로그램 시작 스레드: " + mainThread.getName());
		
		ThreadA threadA = new ThreadA();
		System.out.println("작업 스레드 이름: " + threadA.getName());
		threadA.start();
		
		ThreadB threadB = new ThreadB();
		System.out.println("작업 스레드 이름: " + threadB.getName());
		threadB.start();
	}
}

// 출력
프로그램 시작 스레드: main
작업 스레드 이름: ~ThreadA~
~ThreadA~가 출력한 내용
~ThreadA~가 출력한 내용
작업 스레드 이름: Thread-1
Thread-1가 출력한 내용
Thread-1가 출력한 내용