014 Thread Priority

강의 메모 - Priority #

스레드 우선순위 (Priority) #

  • 단일 CPU에서 여러 스레드를 실행하는 것을 스케줄링이라고 하며 스레드는 스케줄링에 의해 선점되어 CPU 를 할당받는다

  • 자바 런타임은 고정 우선순위 선점형 스케줄링(fixed-priority pre-emptive scheduling ) 으로 알려진 매우 단순하고 결정적인 스케줄링 알고리즘을 지원한다

  • 이 알고리즘은 실행 대기 상태의 스레드 중에 상대적인 우선 순위에 따라 스레드를 예약한다

  • 우선순위 개념

    • Java에서 스레드의 우선 순위는 1에서 10 사이의 정수이며 정수 값이 높을수록 우선순위가 높다
    • 스레드가 생성될 때 우선순위 값이 정해지며 기본 우선 순위인 5 로 설정된다
    • 스케줄러는 우선순위가 높은 스레드를 실행하다가 해당 스레드가 중지, 양보 또는 실행 불가능이 되는 경우 우선 순위가 낮은 스레드를 실행하기 시작한다
    • 두 스레드의 우선순위가 같을 경우 라운드 로빈(순환 할당) 스케줄링 방식에 의해 다음 스레드를 선택한다
    • 스케줄러가 반드시 우선순위가 높은 스레드를 실행한다고 보장 할 수 없다. 운영체제마다 다른 정책들이 있을 수 있으며 기아상태를 피하기 위해 스케줄러는 우선순위가 낮은 스레드를 선택할 수 있다
  • 우선순위 유형

    • 최소 우선순위 – 1, public static int MIN_PRIORITY
    • 기본 우선순위 - 5, public static int NORM_PRIORITY
    • 최대 우선순위 - 10, public static int MAX_PRIORITY
  • 우선순위 변경 및 확인

    • void setPriority(int newPriority)
      • 스레드에 대해 허용되는 우선 순위 값은 1에서 10 사이이며 이 외에 값을 설정하면 오류가 발생한다
      • 스레드의 우선순위를 새롭게 변경한다
    • int getPriority()– 스레드의 우선순위를 반환 함