JAVA
[Thread] 스레드의 우선순위
ewok
2023. 2. 26. 16:49
스레드의 우선순위
작업의 중요도에 따라 스레드의 우선순위를 다르게 하여 특정 스레드가 더 많은 작업시간을 갖게 할 수 있다.
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 // 기본 우선 순위
자바에서는 1 ~ 10 사이의 우선순위 값을 가지며 숫자가 높을수록 우선순위가 높다.
스레드의 우선순위는 스레드를 생성한 스레드로부터 상속받는다. main 메서드를 수행하는 스레드는 우선순위가 5이므로 main 메서드 내에서 생성하는 스레드의 우선순위는 따로 설정하지 않는 한 자동적으로 5가 된다.
우선순위는 스레드를 실행하기 전에만 변경할 수 있다.
우리가 지정하는 우선순위는 희망사항이고, 실제로 우선순위를 결정하는 것은 OS의 스케줄러이다.
우선순위가 높으면 먼저 작업이 시작되고 끝날 확률이 높을 것이라고 기대하는 것이다.
class ThreadEx08 {
public static void main(String args[]) {
ThreadEx8_1 th1 = new ThreadEx8_1();
ThreadEx8_2 th2 = new ThreadEx8_2();
th2.setPriority(7);
//th1은 따로 지정해주지 않았기 때문에 기본값인 5가 된다.
System.out.println("Priority of th1(-) : " + th1.getPriority() );
System.out.println("Priority of th2(|) : " + th2.getPriority() );
th1.start();
th2.start();
}
}
class ThreadEx8_1 extends Thread {
public void run() {
for(int i=0; i < 300; i++) {
System.out.print("-");
for(int x=0; x < 10000000; x++);
}
}
}
class ThreadEx8_2 extends Thread {
public void run() {
for(int i=0; i < 300; i++) {
System.out.print("|");
for(int x=0; x < 10000000; x++);
}
}
}
스레드 그룹
- 서로 관련된 스레드를 그룹을 묶어서 다루기 위한 것
- 모든 스레드는 반드시 하나의 스레드 그룹에 포함되어 있어야 한다.
- 스레드 그룹을 지정하지 않고 생성한 스레드는 'main스레드 그룹'에 속한다.
- 자신을 생성한 스레드(부모 스레드)의 그룹과 우선순위를 상속받는다.
Thread(ThreadGroup group, String name)
Thread(ThreadGroup group, Runnable target)
Thread(ThreadGroup group, Runnable target, String name)
Thread(ThreadGroup group, Runnable target, String name, long stackSize)
ThreadGroup getThreadGroup() 스레드 자신이 속한 스레드 그룹을 반환한다.
void uncaughtException(Thread t, Throwable e) 처리되지 않은 예외에 의해 스레드 그룹의 스레드가 실행이 종료되었을때, JVM에 의해 이 메서드가 자동적으로 호출된다.