프로그래밍 언어/Java
[Java] Thread#2, 스레드의 우선순위 개념 및 예제
코딩하는흑구
2019. 9. 2. 15:38
스레드의 우선순위
동시성 : 멀티작업을 위해 하나의 코어에서 멀티 스레드가 번갈아가면서 실행하는 성질
병렬성 : 멀티작업을 위해 멀티 코어에서 개별 스레드를 동시에 실행하는 성질
스레드 스케줄링
- 스레드의 갯수가 코어의 수보다 많을 경우에 스레드를 어떤 순서에 의해 동시성으로 실행할 것인가에 대한 계획.
- 아주 짧은 시간 스레드의 run 메소드를 번갈아가면서 실행한다.
우선순위(priority) 방식
- 우선순위가 높은 스레드가 실행상태를 더 많이 가져감.
- 객체에 우선순위를 부여하여 개발자가 제어가능.
- 1부터 10까지 우선순위, 높으면 먼저 실행
thread.setPriority(우선순위);
우선순위 상수 : Thread.MAX_PRIORITY(10), Thread.NORM_PRIORITY(5), Thread.MIN_PRIORITY(1)
- 우선순위가 높은 스레드가 실행기회를 더 많이 가지기 때문에 우선순위가 더 낮은 스레드보다 같은 작업이라도 빨리 끝낼 수 있다.
- 하지만 쿼드 코어일 경우 스레드가 4개 보다 적을 경우는 우선순위가 크게 영향을 미치지 못한다. 5개이상일때 우선순위 방식이 효과를 보게 된다.
public class PriorityExample {
public static void main(String[] args) {
for(int i =1; i<=10; i++) {
Thread thread = new ClacThread("thread"+i);
if(i == 10) {
//가장 낮은 우선순위
thread.setPriority(Thread.MAX_PRIORITY);
}else {
//가장 높은 우선순위
thread.setPriority(Thread.MIN_PRIORITY);
}
thread.start();
}
}
}
//---------------------------------------------------------
public class ClacThread extends Thread{
public ClacThread(String name) {
setName(name);
}
public void run() {
for(int i =0; i<2000000000; i++) {}
System.out.println(getName());
}
}
순환 할당(Round-robin) 방식
- 시간할당량(Time Slice)을 정해 하나의 스레드를 정해진 시간만큼만 실행하도록 하는 방식.
- JVM에 의해서 정해지기 때문에 코드로 제어 불가능