반응형
스레드는 자신의 이름을 가지고 있다.
자바에서 기본적으로 제공해주는 싱글스레드 즉 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 |
댓글