Thread
클래스는 우선 순위(priority)라는 멤버 변수를 갖고 있는데, 이 값에 따라 쓰레드가 얻는 실행 시간이 달라짐.
우선 순위를 조절하여 중요한 쓰레드일수록 더 많은 실행 시간을 갖도록 할 수 있음.
사용자에게 빠른 반응을 보여줘야 하는 작업을 하는 쓰레드의 우선 순위는 높아야함.
우선 순위의 범위는 int
1 ~ 10 (숫자가 클수록 우선 순위 높음)
main
메서드를 수행하는 쓰레드의 우선 순위는 5
쓰레드는 자신을 생성한 쓰레드로부터 우선 순위를 상속 받음
main
메서드에서 생성한 쓰레드의 우선 순위는 똑같이 5가 됨.
void setPriority
(int newPriority)
쓰레드의 우선 순위를 지정한 값으로 변경
int getPriority
()
쓰레드의 우선 순위 반환
class ThreadExample {
public static void main(String[] args) {
Thread1 t1 = new Thread1();
Thread2 t2 = new Thread2();
t2.setPriority(7);
System.out.println("t1: " + t1.getPriority());
System.out.println("t2: " + t2.getPriority());
t1.start();
t2.start();
}
}
class Thread1 extends Thread {
public void run() {
for (int i = 0; i < 1000; i++) {
System.out.printf("%s", new String("-"));
for (int x = 0; x < 10000000; x++); // 처리를 지연시키기 위한 빈 반복문
}
}
}
class Thread2 extends Thread {
public void run() {
for (int i = 0; i < 1000; i++) {
System.out.printf("%s", new String("|"));
for (int x = 0; x < 10000000; x++);
}
}
}
t1: 5
t2: 7
-|-|------------------------------------------------------------------------------------------------------------------------------------------------||||----------||||||||||||||||||||||||||||--------------------------------------------------------------||||||||----------------||||||||||||||||--------------||||----------------------------||||||||||||||------------------------------------------------------------|||||||||||||||||||||||...생략
우선 순위를 달리했는데도 쓰레드를 실행시켜보면 티가 나지 않음.
요즘의 컴퓨터 같은 멀티 코어 환경에서는 쓰레드의 우선 순위에 따른 차이가 없기 때문.
코어가 많기 때문에 굳이 한 코어 안에서 우선 순위를 나누어 여러 쓰레드를 실행시키기보다 여러 개의 코어로 분산시켜서 실행하기 때문.
그래서 쓰레드에 우선 순위를 지정하기보다는 PriorityQueue
에 작업들을 집어넣고 우선 순위대로 처리되게 하는 것이 현실적.