본문 바로가기
Java/기초

[java] 스레드(Thread)[3] - 스레드 우선순위를 설정하는 방법

by EricJeong 2019. 7. 27.

스레드를 여러개 제작하여 실행하면 여러 메서드를 병행적으로 실행할 수 있어서 프로세스의 성능을 높일 수 있지만, 스케줄러의 프로세스 실행 상황에 따라 예측 하기가 어렵습니다.

 

스레드가 먼저 시작했다고 우선순위를 가지는 것도 아니고, 먼저 시작한 스레드가 더 늦게 끝날 수도 있습니다.

 

또한 자원 상황에 따라 스레드가 실행되지 못하고 대기 상태로 남아있을 수도 있습니다.

 

그렇기 때문에 스레드의 중요도에 따라 우선순위를 정하는 것이 필요합니다.

 

하지만 이 스레드의 우선순위는 다중 cpu 환경, 또는 멀티코어 환경에서는 무의미합니다.

우선순위를 정하고 싶다면 join() 메서드를 사용하는 것을 권장드립니다

 

이 예제의 실행환경은 멀티코어 스레드이기 때문에, 실행 결과보다는 설정 방법을 확인하는 용도로 참고만 해주시기 바랍니다.

 

 

스레드의 우선순위를 정하는 것은 Thread의 setPriority()메서드를 통해 정할 수 있습니다.

 

스레드 우선순위 예제 코드

package example;

public class PriorityTest extends Thread{
	int num;
	
	public PriorityTest(int num) {
		this.num = num;
	}
	
	@Override
	public void run() {
		
		synchronized (PriorityTest.class) {
			for(int i=0; i<3; i++) {
				System.out.println("my number : " + num);
				System.out.println("my priority : " + this.getPriority());
				System.out.println();
				try {
					Thread.sleep(30);
				} catch (InterruptedException e) {
					e.printStackTrace();
				}
			}
		}
	}
	
	
	
	public static void main(String[] args) {
		PriorityTest[] threads = new PriorityTest[3];
		
		threads[0] = new PriorityTest(0);
		threads[0].setPriority(6);
		threads[1] = new PriorityTest(1);
		threads[1].setPriority(7);
		threads[2] = new PriorityTest(2);
		
		
		
		
		for(PriorityTest testThread : threads) {
			testThread.start();
		}
		
		
	}
}

 

 

실행 결과

 

 

 

Thread의 priority는 기본값으로 5를 가지고 있습니다.

priority값이 높을수록 우선순위가 더 높아지고, 값의 범위는 1 ~ 10입니다.

 

 

priority의 활용 범위

priority의 범위 사용 유형
10 위기관리
7 ~ 9 상호작용, 이벤트 관리
4 ~ 6 IO관련 작업
2 ~ 3 백그라운드 작업
1 기타 작업

 

 

댓글