Java/객체지향

[객체지향][쓰레드/thread] - 쓰레드의 우선순위, 쓰레드 그룹

얄루몬 2022. 3. 1. 15:54

https://youtu.be/KWZjeW6zkyY?list=PLW2UjW795-f6xWA2_MUhEVgPauhGl3xIp 

📖본 포스팅은 '자바의 정석 - 남궁성 저자' 님의 책과 유튜브 강의를 보고 작성되었습니다.


[쓰레드의 우선순위(priority of Thread)]

  • 작업의 중요도에 따라 쓰레드의 우선순위를 다르게 하여 특정 쓰레드가 더 많은 작업 시간을 갖게 할 수 있다.
  • 자바에서는 쓰레드의 우선순위를 1 ~ 10까지 줄 수 있다. (10이 가장 중요)
        void setPriority(int newPriority); //쓰레드의 우선순위를 지정한 값으로 변경한다.
	int getPriority();
	
	public static final int MAX_PRIORITY = 10; //최대 우선순위
	public static final int MIN_PRIORITY = 1; //최소 우선순위
	public static final int NORM_PRIORITY = 5; //보통 우선 순위

 

[실습]

package javajungsuk;

public class Java13_6 {

	public static void main(String[] args) {
		ThreadEx6_1 th1 = new ThreadEx6_1();
		ThreadEx6_2 th2 = new ThreadEx6_2();
		
		
		//쓰레드의 경우 기본 순위 5이고 쓰레기2는 7로 설정
		th2.setPriority(7);
		
		System.out.println("Priority of th1(-) : " + th1.getPriority());
		System.out.println("Priority of th2(-) : " + th2.getPriority());
		th1.start();
		th2.start();
	}

}


class ThreadEx6_1 extends Thread{
	public void run() {
		for(int i = 0 ; i < 300 ; i++) {
			System.out.print("-");
			for (int x = 0; x < 10000000; x++);//시간 지연용 for
		}
	}
}
class ThreadEx6_2 extends Thread{
	public void run() {
		for(int i = 0 ; i < 300 ; i++) {
			System.out.print("|");
			for (int x = 0; x < 10000000; x++);//시간 지연용 for
		}
	}
}
  • 우선순위 할당에 따라서 우선순위가 높은 게 더 빨리 끝날 거 같지만 꼭 그렇지만은 않다. (반드시 꼭 그렇진 않다.)
  • 그러나 확률상 우선순위가 높은 쓰레드가 더 빨리 끝날 확률이 높아진다.(확률적인 문제임)
  • 여담이지만 마우스 포인터는 우선순위가 아주 높다고 한다. 다른 프로그램이 멈췄다고 마우스까지 멈추면 매우 답답하기 때문이다. 

 

 

[쓰레드 그룹]

  • 서로 관련된 쓰레드를 그룹으로 묶어서 다루기 위한 것이다.
  • 모든 쓰레드는 반드시 하나의 쓰레드 그룹에 포함되어 있어야 한다.
  • 쓰레드 그룹을 지정하지 않고 생성한 쓰레드는 'main 쓰레드 그룹'에 속한다.
  • 자신을 생성한 쓰레드(부모 쓰레드)의 그룹과 우선순위를 상속 받는다.

 

[쓰레드 그룹의 메서드]