[java] 스레드 우선순위(Thread Priority)의 의미는?

스레드 우선순위(Thread Priority)는 스레드가 작업을 수행하는 동안 운영체제에게 우선순위를 설정하는 도구입니다. 스레드 우선순위는 각 스레드의 중요성을 표현하며, 운영체제는 이 우선순위를 기준으로 CPU 할당을 조정합니다.

스레드 우선순위의 범위와 기본값

스레드 우선순위는 1부터 10까지의 범위로 표현됩니다. 일반적으로 1이 가장 낮은 우선순위이고 10이 가장 높은 우선순위입니다.

새로운 스레드를 생성하면, 기본적으로 부모 스레드의 우선순위를 상속받습니다. 때문에 부모 스레드의 우선순위가 5라면, 새로운 스레드의 우선순위도 5가 됩니다.

스레드 우선순위 설정 방법

스레드의 우선순위는 Thread.setPriority() 메서드를 통해 설정할 수 있습니다. 이 메서드에는 3가지 옵션이 있습니다.

  1. Thread.MIN_PRIORITY: 우선순위를 가장 낮은 값인 1로 설정합니다.
  2. Thread.NORM_PRIORITY: 우선순위를 중간 값인 5로 설정합니다(기본값).
  3. Thread.MAX_PRIORITY: 우선순위를 가장 높은 값인 10으로 설정합니다.

예를 들어, 아래 코드는 우선순위가 8인 스레드를 생성하는 예시입니다.

Thread thread = new Thread();
thread.setPriority(Thread.MAX_PRIORITY);

주의사항

스레드 우선순위를 설정할 때 주의해야 할 점도 있습니다.

첫째로, 스레드 우선순위는 운영체제에 따라 다를 수 있습니다. 따라서 우선순위에 의존하는 로직을 작성할 경우 이식성에 문제가 있을 수 있습니다.

둘째로, 스레드 우선순위는 모든 상황에서 엄격하게 적용되지 않을 수 있습니다. 운영체제는 우선순위를 참고하여 CPU 할당을 조정하지만, 그저 참고값일 뿐입니다. 따라서 우선순위에 의해 스레드의 실제 동작이 보장되지는 않습니다.

결론

스레드 우선순위는 스레드의 중요성을 표현하고, 운영체제에게 CPU 할당을 요청하는 도구입니다. 하지만 운영체제에 의해 엄격하게 적용되지는 않으며, 이식성에도 주의해야 합니다. 스레드 우선순위는 특정 상황에서 성능 향상을 위해 활용될 수 있지만, 주의해서 사용해야 합니다.

참고 자료