HOME > java > basic

Java - Thread 우선순위(Priority) 설정

By JS | 17 Nov 2019

자바에서 쓰레드를 생성하여 멀티쓰레드로 동작하도록 할 수 있습니다. 또한, 쓰레드마다 우선순위(Priority)를 다르게 설정할 수 있습니다. 시스템이 busy할 때 우선순위가 높은 쓰레드에게 먼저 CPU를 할당해 줍니다.

우선순위는 1부터 10까지의 숫자로 설정할 수 있으며, 다음 3개의 static 변수를 제공합니다.

/**
 * The minimum priority that a thread can have.
 */
public final static int MIN_PRIORITY = 1;

/**
 * The default priority that is assigned to a thread.
 */
public final static int NORM_PRIORITY = 5;

/**
 * The maximum priority that a thread can have.
 */
public final static int MAX_PRIORITY = 10;

쓰레드를 생성하면 기본적으로 우선순위는 5로 설정되어있습니다. 어떤 쓰레드가 5보다 큰 우선순위를 갖고 있다면, 시스템은 우선순위가 5인 쓰레드보다 더 우선하여 CPU를 스케줄링해 줍니다. 만약 두개 쓰레드의 우선순위가 같다면, 어떤 쓰레드를 우선시 할지 알 수 없습니다.

setPriority(), getPriority()

Thread에 우선순위를 설정할 때는 setPriority()를, 설정된 값을 확인할 때는 getPriority()를 호출합니다.

package basic;

public class Example1 {

    public static void main(String[] args) {

        Thread t1 = new Thread(()-> System.out.println("Doing a task: t1"));
        Thread t2  = new Thread(()-> System.out.println("Doing a task: t2"));
        Thread t3  = new Thread(()-> System.out.println("Doing a task: t3"));

        System.out.println("Priority of t1: " + t1.getPriority());
        System.out.println("Priority of t2: " + t2.getPriority());
        System.out.println("Priority of t3: " + t3.getPriority());

        t1.setPriority(Thread.MIN_PRIORITY);
        t2.setPriority(Thread.NORM_PRIORITY);
        t3.setPriority(Thread.MAX_PRIORITY);

        System.out.println("Priority of t1: " + t1.getPriority());
        System.out.println("Priority of t2: " + t2.getPriority());
        System.out.println("Priority of t3: " + t3.getPriority());

        t1.setPriority(6);
        t2.setPriority(7);
        t3.setPriority(8);

        System.out.println("Priority of t1: " + t1.getPriority());
        System.out.println("Priority of t2: " + t2.getPriority());
        System.out.println("Priority of t3: " + t3.getPriority());

        t1.start();
        t2.start();
        t3.start();
    }
}

참고