스레드를 여러개 제작하여 실행하면 여러 메서드를 병행적으로 실행할 수 있어서 프로세스의 성능을 높일 수 있지만, 스케줄러의 프로세스 실행 상황에 따라 예측 하기가 어렵습니다.
스레드가 먼저 시작했다고 우선순위를 가지는 것도 아니고, 먼저 시작한 스레드가 더 늦게 끝날 수도 있습니다.
또한 자원 상황에 따라 스레드가 실행되지 못하고 대기 상태로 남아있을 수도 있습니다.
그렇기 때문에 스레드의 중요도에 따라 우선순위를 정하는 것이 필요합니다.
하지만 이 스레드의 우선순위는 다중 cpu 환경, 또는 멀티코어 환경에서는 무의미합니다.
우선순위를 정하고 싶다면 join() 메서드를 사용하는 것을 권장드립니다
이 예제의 실행환경은 멀티코어 스레드이기 때문에, 실행 결과보다는 설정 방법을 확인하는 용도로 참고만 해주시기 바랍니다.
스레드의 우선순위를 정하는 것은 Thread의 setPriority()메서드를 통해 정할 수 있습니다.
스레드 우선순위 예제 코드
package example;
public class PriorityTest extends Thread{
int num;
public PriorityTest(int num) {
this.num = num;
}
@Override
public void run() {
synchronized (PriorityTest.class) {
for(int i=0; i<3; i++) {
System.out.println("my number : " + num);
System.out.println("my priority : " + this.getPriority());
System.out.println();
try {
Thread.sleep(30);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
public static void main(String[] args) {
PriorityTest[] threads = new PriorityTest[3];
threads[0] = new PriorityTest(0);
threads[0].setPriority(6);
threads[1] = new PriorityTest(1);
threads[1].setPriority(7);
threads[2] = new PriorityTest(2);
for(PriorityTest testThread : threads) {
testThread.start();
}
}
}
실행 결과
Thread의 priority는 기본값으로 5를 가지고 있습니다.
priority값이 높을수록 우선순위가 더 높아지고, 값의 범위는 1 ~ 10입니다.
priority의 활용 범위
priority의 범위 | 사용 유형 |
10 | 위기관리 |
7 ~ 9 | 상호작용, 이벤트 관리 |
4 ~ 6 | IO관련 작업 |
2 ~ 3 | 백그라운드 작업 |
1 | 기타 작업 |
'Java > 기초' 카테고리의 다른 글
[Java] 이클립스 설치방법 - JDK 1.7 설치, Eclipse Luna 설치 (0) | 2019.08.23 |
---|---|
[Java] String .split(".")결과가 공백이 나올 때 해결방법 (1) | 2019.08.21 |
[java] 스레드(Thread)[4] - 스레드의 상태(state) 제어 (0) | 2019.07.27 |
[java] 스레드(Thread)[2] - Runnable을 이용하여 구현하는 방법 (0) | 2019.07.27 |
[java] 스레드(Thread)[1] - run()과 start()의 차이 (2) | 2019.07.27 |
댓글