프로그래밍 언어/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에 의해서 정해지기 때문에 코드로 제어 불가능