[자바] 멀티 스레드 ③ 스레드 우선순위

Java

2020. 11. 23.

멀티 스레드는 동시성 또는 병렬성으로 실행된다.

-동시성(Concurrency) : 멀티 작업을 위해 하나의 코어에서 멀티 스레드가 번갈아가며 실행하는 성질

-병렬성(Parallelism) : 멀티 작업을 위해 멀티 코어에서 개별 스레드를 동시에 실행하는 성질.

싱글 코어 CPU를 이용한 멀티 스레드 작업은 병렬이 아니라 사실은 번갈아가며 실행하는 동시성 작업이다.

 

스레드 스케줄링

스레드의 개수가 코어의 수보다 많을 경우, 스레드를 어떤 순서에 의해 동시성으로 실행할 것인가를 결정해야 하는 것.

스레드 스케줄링에 의해 스레드들은 아주 짧은 시간에 번갈아가면서 그들의 run() 메소드를 조금씩 실행한다.

자바의 스레드 스케줄링은 우선순위(Priority) 방식과 순환 할당(Round-Robin) 방식을 사용한다.

-우선순위 방식 : 우선순위가 높은 스레드가 실행 상태를 더 많이 가지도록 스케줄링 한다.

                     개발자가 스레드 객체에 우선 순위 번호를 부여할 수 있다. 코드로 제어할 수 있다.

-순환 할당 방식 : 시간 할당량(Time Slice)을 정해서 하나의 스레드를 정해진 시간만큼 실행하고 다른 스레드를 실행한다.

                     JVM에 의해서 정해지기 때문에 코드로 제어할 수 없다.

 

 

우선순위 방식으로 스레드 스케줄링 제어하기

우선순위는 1부터 10까지 부여된다. 1이 가장 낮고 10이 가장 높은 우선순위이다.

우선순위를 부여하지 않으면 모든 스레드들은 기본적으로 5의 우선순위를 할당받는다.

 

우선순위 변경하기 : setPriority()

thread.setPriority(우선순위);

매개값으로 1~10까지 정수 리터럴을 사용해도 되지만, 코드의 가독성을 위해 Thread 클래스의 상수를 사용할 수도 있다.

thread.setPriority(Thread.MAX_PERIORITY);
thread.setPriority(Thread.NORM_PERIORITY);
thread.setPriority(Thread.MIN_PERIORITY);