본문 바로가기
My Image
프로그래밍/Java

[Java] multiThread name - 스레드 이름

by Lim-Ky 2017. 7. 2.
반응형

스레드는 자신의 이름을 가지고 있다.

 

자바에서 기본적으로 제공해주는 싱글스레드 즉 mainThread는 main이라는 이름을 이미 가지고있고

 

우리가 만드는 작업스레드는 우리가 따로 스레드이름을 정의해주지 않으면 Thread-n과 같은 형식으로 이름이 부여된다

 

만약 우리가 스레드 이름을 정의하고 싶으면 setName("스레드 이름"); 같이 메서드를 실행하면되고, 

 

스레드 이름을 얻어오려면 getName(); 메서드를 통해 이름을 얻어올 수 있다.

(setName("스레드이름"),getName()메서드는 기본적으로 thread를 참조하면 제공되는 메서드다.)

 

 

아래 간단한 예제를 보고 스레드 이름을 정의하는 것을 익혀보자.

 

 

 

 

package MultiThreadName;

public class Main {

	public static void main(String[] args) {
		// TODO Auto-generated method stub

		//Thread.currentThread()메서드는 현재 이코드를 수행하는 스레드 객체를 얻어온다.
		//자바에서 기본적으로 제공하는 mainThread 객체를 얻을 것이다.
		//결국 최초의 main메서드와 코드를 실행하기 위해선 스레드가 필요하다.
		Thread mainThread = Thread.currentThread();
		System.out.println("프로그램 시작 스레드 이름 : "+ mainThread.getName());
		
		
		
		//작업스레드 A생성
		//익명객체로 생성 
		//따로 스레드 이름을 설정하지 않으면 기본적으로 Thread-n형식으로 이름이 정의됨.
		//작업스레드를 처음 만들었기 때문에 Thread-0으로 이름이 정의되었을 것임.
		Thread threadA = new Thread(){
	
			@Override
			public void run() {
				// TODO Auto-generated method stub
				super.run();
				 for(int i = 0 ; i <5; i++)
					 System.out.println("작업스레드 이름 : "+getName());
			}
			
		};
		threadA.start();
		
		//ThreadB 생성자에서 setName("ThreadB")메서드를 통해 스레드 이름을 정의했음.
		ThreadB threadB = new ThreadB();
		threadB.start();
		
		
		
	}

}

 

package MultiThreadName;

public class ThreadB extends Thread{

	public ThreadB(){
		//생성자
		setName("ThreadB");
	}
	
	@Override
	public void run() {
		// TODO Auto-generated method stub
		super.run();
		 for(int i = 0 ; i <5; i++)
			 System.out.println("작업스레드 이름 : "+getName());
	}
}
 

주석을 통해 쉽게 이해했을 것이라 생각된다.

 

우리가 스레드 이름을 정의해야하는 이유가 무엇일까??? 

 

스레드의 이름이 정말 중요한 역할을 하는 것은 아니지만, 

 

멀티스레드 프로그램 환경에서..

버그나, 치명적인 오류가 발생했을 때 원인파악에 용이하다. 

즉 디버깅할 때 어떤 스레드가 무슨 작업을 하고 있는지 파악하기 위해서 스레드 이름을 사용한다.

 

알아두면 유용할듯.

 

 

2017/06/29 - [Java] - [Java] multi thread 구현 01

2017/07/02 - [Java] - [Java] multi thread 구현 02

2017/06/27 - [Java] - [Java] 멀티스레드 개념

 

 

 



 

반응형

'프로그래밍 > Java' 카테고리의 다른 글

[Java] Generic(제네릭)  (3) 2017.07.10
[Java] Thread Pool(스레드 풀)  (11) 2017.07.07
[Java] multi thread 구현 02  (0) 2017.07.02
[Java] multi thread 구현 01  (1) 2017.06.29
[Java] JVM 메모리 구조  (4) 2017.06.28

댓글