스레드 우선순위

더보기

- 자바의 스레드 스케쥴링은 우선순위(Priority)방식과 라운드 로빈(Round-robin) 방식을 사용한다.

1) 우선순위(Priority) 방식

- 우선순위가 높은 스레드가 실행 상태를 더 많이 가지도록 스케쥴링 하는 것

- 우선순위를 부여하여 코드로 제어가 가능하다.

2) 라운드 로빈(Round-robin) 방식

- 시간 할당량(Time Slice)을 정해서 스레드를 정해진 시간만큼 실행시키고 다른 스레드를 실행하는 방식

- JVM에 의해 정해지므로 코드로 제어할 수 없다.

 

- 스레드는 우선순위를 나타내는 필드(priority)를 가지고 있다. 1~10 사이의 값을 갖는다. (10: 가장 높음)

- 자바 런타임 스케줄러는 현재 실행 가능한 스레드들 중에서 우선순위가 가장 높은 스레드를 실행시켜 주는데, 현재 실행중인 스레드보다 더 높은 우선순위를 갖는 스레드가 실행가능 상태가 되면 자바 런타임 스케줄러는 우선순위가 더 높은 스레드를 실행시켜 준다.

- 스레드 우선 순위는 스레드를 생성한 스레드로부터 상속 받는다. main() 메소드에서 스레드를 생성하면 main() 메소드의 우선 순위가 5이므로 자동으로 5를 갖는다.

Ex007_Priority >>

더보기
package threadEx;

public class Ex007_Priority {
	public static void main(String[] args) {
		MyThread7 t1 = new MyThread7("A");
		MyThread7 t2 = new MyThread7("B");
		MyThread7 t3 = new MyThread7("C");

		t1.setPriority(Thread.MIN_PRIORITY); // 1
		t2.setPriority(Thread.MAX_PRIORITY); // 10
		
		t1.start();
		t2.start();
		t3.start();
		
	}
}

class MyThread7 extends Thread {
	public MyThread7(String name) {
		super(name);
	}

	@Override
	public void run() {
		for (int i = 1; i <= 20; i++) {
			// System.out.println(getName() + " -> " + i);
			System.out.println(this); // [스레드명, 우선순위, 그룹]
		}

	}
}

몇 번 실행시켜보면 우선순위가 높은 B부터 일처리를 하는 것을 알 수 있다.

 

+ Recent posts