본문 바로가기
Work & Study/JAVA (& 혼공자Java)

자바(Java) - 스레드4 (스레드 이름)

by a.k.a DUKI 2020. 12. 21.
728x90
반응형

작업 스레드 생성과 실행

멀티 스레드로 실행하는 애플리케이션을 개발하기 위해서는 몇개의 작업을 병렬로 실행하지 결정하고 각 작업별로 스레드를 생성해야 한다.

모든 자바 애플리케이션 메인 스레드는 반드시 존재하기 때무에 메인 작업 이외에 추가적인 병렬 작업의 수만큼 스레드를 생성하여 이용하면 된다.

  • java.lang.Thread 클래스를 직접 객체화 해서 생성 가능

dustink.tistory.com/82

 

자바(Java) - 스레드2 (toolkit.beep(); 비프음 실행)

작업 스레드 생성과 실행 멀티 스레드로 실행하는 애플리케이션을 개발하기 위해서는 몇개의 작업을 병렬로 실행하지 결정하고 각 작업별로 스레드를 생성해야 한다. 모든 자바 애플리케이션

dustink.tistory.com

  • Thread클래스를 상속해서 하위 클래스를 만들어 생성 가능

dustink.tistory.com/85

 

자바(Java) - 스레드3 (toolkit.beep(); 비프음 실행)

작업 스레드 생성과 실행 멀티 스레드로 실행하는 애플리케이션을 개발하기 위해서는 몇개의 작업을 병렬로 실행하지 결정하고 각 작업별로 스레드를 생성해야 한다. 모든 자바 애플리케이션

dustink.tistory.com

 

Thread 의 이름

스레드의 이름은 큰역할은 하지 않으나, 디버깅할때 어떤 스레드가 진행중인지, 조사할 목적으로 사용된다.메인 스레드는 'main'이라는 이름을 갖고, 직접 생성한 스레드는 자동정으로 'Thread-n'이라는 이름으로 설정된다.

n은 스레드의 번호 인데, 다른 이름으로 하고 싶다면, setName()메소드로 변경하면 된다.

//스레드 이름 변경하기
thread.setName("스레드 이름");

 

반대로 이름을 알고 싶은 경우는 getName()메소드를 호출 하면 된다.

//메소드 이름 알고플때
thread.getName();

 

만약, 스레드 객체의 참조를 갖고 있지 않으면, Thread 클래스의 정적 메소드인 currentThread() 를 이용해서 현재 스레드의 참조를 얻을 수 있다.

Thread thread = Thread.currentThread();

 

 

예시1) 메인 스레드 이름 출력 및 UserThread 생성 및 시작

public class ThreadNameEx {

	public static void main(String[] args) {
		Thread mainThread = Thread.currentThread(); //이 코드를 실행하는 스레드 객체 얻기
		System.out.println("프로그램 시작 스레드 이름: "+ mainThread.getName()); //스레드 이름 얻기
		
		ThreadA threadA = new ThreadA(); //TreadA 생성
		System.out.println("작업 스레드 이름: "+ threadA.getName());//스레드 이름 얻기
		threadA.start(); // ThreadA 시작
		
		ThreadB threadB = new ThreadB(); //TreadB 생성
		System.out.println("작업 스레드 이름: "+ threadB.getName());//스레드 이름 얻기
		threadB.start(); // ThreadB 시작
	}
}

ThreadA 와 ThreadB가 작성되지 않으면, 오류처럼 계속 생긴다.

ThreadA 클래스와 ThreadB 클래스를 작성하면 오류는 사라지니 ThreadA 클래스와 ThreadB의 실행내용을 먼저 작성하는 편이 좋을 것 같다.

 

ThreadA 클래스

public class ThreadA extends Thread{
	public ThreadA() {
		setName("ThreadA");
	}
	
	public void run() { // ThreadA 실행 내용
		for(int i=0; i<2; i++) {
			System.out.println(getName() + "가 출력한 내용"); //스레드 이름 얻기
		}
	}
}

ThreadB 클래스

public class ThreadB extends Thread{
	public ThreadB() {
		setName("ThreadB");
	}
	
	public void run() { // ThreadB 실행 내용
		for(int i=0; i<2; i++) {
			System.out.println(getName() + "가 출력한 내용"); //스레드 이름 얻기
		}
	}
}

실행은 main() 가 있는 곳에서 실행을 해야한다.

 

 

할 수 있다. 스레드. 좀 더 파보자.

 

 


※용어 정리

  • 프로세스: 애플리케이션을 실행하면 운영체제로부터 실행에 필요한 메모리를 할당받아 애플리케이션이 실행되는 것이다.

  • 멀티 스레드: 하나의 프로세스 내에 동시 실행을 하는 스레드들이 2개 이상인 경우이다.

  • 메인 스레드: 자바의 모든 애플리케이션은 메인 스레드가 main()메소드를 싱행하면서 시작한다. 메인 스레드는 main() 메소드의 첫 코드부터 아래로 순차적으로 실행하고, main()메소드의 마지막 코드를 실행하거나 return문을 만나면 실행이 종료 된다.

  • 작업 스레드: 메인 작업 이외에 병렬 작업의 수만큼 생성하는 스레드를 말한다. 작업 스레드도 객체로 생성되기 때문에 크래스가 필요하다. Thread 클래스를 직접 객체화해서 생성할 수도 있고, Thread클래스를 상속해서 하위 클래스를 만들어 생성할 수도 있다.

 

본 내용은 #혼자공부하는자바 책을 참고해 공부하려 작성했습니다.

 

728x90
반응형