2021-02-15
많은 Thread들이 동시에 수행이 된다면 자신이 원하는 결과를 얻지 못하고, 원치 않는 결과물이 나올 수 도 있다. 이럴 경우를 대비해서 자바에서는 Thread들 간의 우선순위를 정해 혼란을 방지하고 먼저 수행되야할 Thread와 그 이후에 수행되어야 할 Thread를 정할 수 있는데, 오늘은 그 방법을 알아보도록 하자.
- 실행 코드
package Thread;
public class main {
public static void main(String[] args) {
Thread thread1 = new Thread(() -> {
for(int i = 0; i< 5; i++) {
System.out.println("thread1 실행중입니다 . . . .");
}
System.out.println();
});
Thread thread2 = new Thread(() -> {
for(int i = 0; i< 5; i++) {
System.out.println("thread2 실행중입니다 . . . .");
}
System.out.println();
});
thread1.setPriority(5);
thread2.setPriority(10);
//우선순위는 1~ 10까지 있다.
thread1.start();
thread2.start();
}
}
위와 같이 두 가지의 스레드를 구현하였는데, loop를 돌면서 자신의 실행 중이라는 것을 알리는 간단한 코드이다. 만약에 Thread 2가 Thread1 보다 반드시 먼저 수행되어야 한다고 하면, Thread의 메서드 setPriority( )를 통해서 높은 우선순위를 부여할 수 있다.
여기서 우선순위는 1 ~ 10 의 값으로 부여할 수 있으며, 숫자가 클수록 우선순위가 높은 Thread로 인식하게 된다. 해당 코드에서는 thread2 가 우선순위가 10으로 thread1보다 훨씬 높기 때문에 thread2가 모두 수행된 후에 thread1 이 실행되게 된다. 결과는 아래와 같다.
- 번외
thread1.setPriority(5);
thread2.setPriority(7);
//우선순위는 1~ 10까지 있다.
우선순위가 높다고 무조건 먼저 다 수행되는 것이 아닌, 위와 같이 우선순위 간에 큰 차이가 나지 않을 경우에는 번갈아 가며 수행된다.( 우선순위가 코드가 수행되는 순서를 정해주는 것이 아닌, 해당 스레드가 수행될 빈도수를 높여주는 것으로 이해하는 것이 좀 더 맞을 것 같다. )