[java] 스레드 로테이션(Thread Rotation)과 스레드 우선 순서

스레드 로테이션(Thread Rotation)은 여러 스레드가 주어진 시간 동안 CPU를 공정하게 사용하는 방법입니다. 이 방법은 여러 스레드가 동시에 실행되는 멀티 스레딩 환경에서 효율적으로 CPU 시간을 공유하기 위해 사용됩니다. 스레드 로테이션은 스레드가 일정 시간마다 순환하여 CPU를 사용하도록 하는 기법이며, 이를 통해 각 스레드가 공정하게 CPU 시간을 할당받을 수 있습니다.

스레드 로테이션의 작동 방식

스레드 로테이션은 시간 할당량(Time Quantum)이라는 개념을 사용합니다. 시간 할당량은 각 스레드가 CPU를 사용할 수 있는 시간입니다. 스레드 로테이션은 주어진 시간이 지나면 현재 실행 중인 스레드를 중지하고 다음 스레드를 실행하는 방식으로 동작합니다. 각 스레드는 시간 할당량이 다되면 다른 스레드에게 CPU를 양보하고, 다른 스레드가 일정 시간 동안 CPU를 사용한 후 다음 스레드로 넘어가는 식으로 작업이 진행됩니다.

스레드 우선 순서

스레드 로테이션은 스레드 우선 순서(Thread Priority)에도 영향을 받습니다. 스레드 우선 순서는 각 스레드의 실행 우선 순위를 결정하는데 사용됩니다. 스레드는 우선 순위가 높을수록 CPU를 할당받는 확률이 높아집니다. 그러나 스레드 로테이션은 각 스레드가 CPU 시간을 공정하게 점유할 수 있도록 할 뿐, 우선 순위에 따라 CPU를 할당하는 것은 아닙니다. 따라서 스레드 로테이션은 우선 순위가 낮은 스레드도 일정 시간 동안 CPU를 사용할 수 있도록 보장합니다.

예시 코드

public class ThreadRotationExample {
    public static void main(String[] args) {
        Thread thread1 = new Thread(new MyRunnable(), "Thread 1");
        Thread thread2 = new Thread(new MyRunnable(), "Thread 2");
        Thread thread3 = new Thread(new MyRunnable(), "Thread 3");

        thread1.start();
        thread2.start();
        thread3.start();
    }

    static class MyRunnable implements Runnable {
        @Override
        public void run() {
            for (int i = 0; i < 10; i++) {
                System.out.println(Thread.currentThread().getName() + ": " + i);
            }
        }
    }
}

위의 예시 코드는 세 개의 스레드를 생성하고 실행하는 간단한 예제입니다. 각 스레드는 0부터 9까지 숫자를 출력하는 작업을 반복적으로 수행합니다. 스레드 로테이션이 적용되지 않은 경우에는 한 스레드가 연속적으로 실행되는 것을 확인할 수 있습니다. 그러나 스레드 로테이션을 적용하면 각 스레드가 일정 시간 동안 순환하여 CPU를 사용하여 작업을 수행하게 됩니다.

참고 자료