2021-02-10
여러 개의 스레드를 사용하다 보면, 스레드 간의 이름이 혼동되는 상황이 발생할 수 있다. 이 경우를 대비하여 스레드 간의 이름을 설정하는 방법이 존재하는데 오늘은 이와 같은 방법을 알아보자.
-
예제 스레드 2개
package Thread;
public class Thread_A extends Thread{
public Thread_A() {
setName("Thread_A");
}
@Override
public void run() {
for(int i = 0; i < 5; i++) {
System.out.println("상속받은 Thread_A 클래스가 실행 중 입니다.");
}
}
}
스레드는 총 2가지 스레드를 사용할 것이다. 하나는 클래스에서 Thread를 상속받아 구현한 스레드(Thread_A)이며, 다른 하나는 메인 메서드 내부에서 자체적으로 Runnable 객체를 구현한 스레드(thread1)이다.
package Thread;
public class main {
public static void main(String[] args) {
//스레드 이름 설정하기
Thread thread1 = new Thread(()-> {
for(int i = 0; i < 5; i++) {
System.out.println("Thread1 이 실행중입니다.");
}
});
thread1.setName("Thread1");
System.out.println("현재 동작중인 스레드는- " + thread1.getName() + " -입니다.");
thread1.start();
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
//쓰레드간 구별을 주기위해 잠깐 스레드를 멈춤
Thread_A threada = new Thread_A();
System.out.println("현재 동작중인 스레드는- " + threada.getName() + " -입니다.");
threada.start();
}
}
사실 누구나 예상할 수 있는 메서드이다. setName을 사용하면 스레드에 이름을 붙일 수 있다. 이후 지금 동작하는 스레드가 무엇인지 알고 싶으면 getName 메서드를 호출하여, 해당 정보를 얻을 수 있다. 실행결과는 아래와 같다.