반응형
package multi_thread;

import java.awt.Toolkit;

public class ThreadPriority {

	public static void main(String[] args) {
		
		// 방법1
		Thread thread = new BeepThread();
		thread.start();

		thread.setPriority(Thread.MAX_PRIORITY); // 우선순위 10
		thread.setPriority(Thread.NORM_PRIORITY); // 우선순위 5
		thread.setPriority(Thread.MIN_PRIORITY); // 우선순위 1
		
		// 방법2 (익명 객체를 이용한 방법)
		/*
		Thread thread2 = new Thread() {
			public void run() {
				Toolkit toolkit = Toolkit.getDefaultToolkit();
				for(int i = 0 ; i < 5 ; i++) {
					toolkit.beep();
					try {Thread.sleep(500);} catch(Exception e) {}
				}
			}
		};
		thread2.start();
		*/
		
		for (int i = 0 ; i < 5 ; i++) {
			System.out.println("띵");
			try {Thread.sleep(500);} catch(Exception e) {}
		}

	}

}

위는 저번에 했던 예제를 그냥 가져왔습니다. 이번 내용은 큰 실습내용이 없기 때문입니다.


멀티스레드가 병렬적으로 실행되는 거라고 했는데 실제로는 번갈아가면서 실행하는 작업입니다.

자바에서 스레드 스케줄링은 우선순위(Priority) 방식과 순환 할당 (Round-Robin) 방식을 사용합니다.
우선순위가 높은 스레드가 실행 상태를 더 많이 가져가게 되는 것이소
시간 할당량(Time slice)를 정해서 하나의 스레다가 정해진 시간만큼 실행 하고 다른 스레드를 실행하는 방식입니다.

thread.setPriorty(우선순위); 를 이용해 우선순위를 정해줄 수 있습니다.
1 ~ 10까지 값이 들어갑니다. 기본적으로 모든 스레드는 5 우선순위를 할당 받습니다.
1은 가장 낮고 10이 가장 높습니다.

우선순위는 최소한 5개 이상의 스레드가 실행 되어야 우선순위의 영향을 받습니다.

thread.setPriority(Thread.MAX_PRIORITY)
thread.setPriority(Thread.NORM_PRIORITY)
thread.setPriority(Thread.MIN_PRIORITY)

 

이런식으로 10 5 1이라는 숫자를 대신 넣을 수 있습니다.

MAX는 가장 큰 수라는 의미 10 NORM은 평균이라는 의미 5 MIN은 가장 적은 수라는 의미 1을 의미합니다.

반응형