Thread 클래스에는 아래와 같이 우선순위들을 가지고 있다.
class Thread implements Runnable {
public final static int MIN_PRIORITY = 1; //최소 우선순위
public final static int NORM_PRIORITY = 5; //보통 우선순위
public final static int MAX_PRIORITY = 10; //최대 우선순위
}
우선 순위는 start()메서드를 호출하기 전에 설정해야 한다.
join()을 쓰는 이유 : 프로그램 작업이 마칠때까지 mainThread가 종료되는 것을 방지하기 위해
public class T08_ThreadPriority {
public static void main(String[] args) {
Thread th1 = new Thread1(); // 대문자 출력
Thread th2 = new Thread2(); // 소문자 출력
th1.setPriority(Thread.MAX_PRIORITY); // = th1.setPriority(10);
//대문자 출력 스레드에 최대 우선순위를 가지고 있어서
//대문자+소문자+... 순으로 출력된다.
th2.setPriority(1); //= th2.setPriority(Thread.MIN_PRIORITY);
System.out.println("th1의 우선순위 : " + th1.getPriority());
// 최대 우선순위 10
System.out.println("th2의 우선순위 : " + th2.getPriority());
// 최소 우선순위 1
th1.start();
th2.start();
try {
th1.join();
th2.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("최대 우선순위: "+ Thread.MAX_PRIORITY);
System.out.println("최소 우선순위: "+ Thread.MIN_PRIORITY);
System.out.println("보통 우선순위: "+ Thread.NORM_PRIORITY);
}
}
대문자 출력하는 스레드
class Thread1 extends Thread{
@Override
public void run() {
for(char ch='A'; ch<='Z'; ch++) {
System.out.println(ch);
//아무것도 하지 않는 반복문 (시간때우기용)
for (int i = 1; i <= 1000000000L; i++) {}
}
}
}
소문자 출력하는 스레드
class Thread2 extends Thread{
@Override
public void run() {
for(char ch='a'; ch<='z'; ch++) {
System.out.println(ch);
//아무것도 하지 않는 반복문 (시간때우기용)
for (int i = 1; i <= 1000000000L; i++) {}
}
}
}