[Java] Thread 우선순위 정하기 (스레드 우선순위)

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까지 있다.

 

우선순위가 높다고 무조건 먼저 다 수행되는 것이 아닌, 위와 같이 우선순위 간에 큰 차이가 나지 않을 경우에는 번갈아 가며 수행된다.( 우선순위가 코드가 수행되는 순서를 정해주는 것이 아닌, 해당 스레드가 수행될 빈도수를 높여주는 것으로 이해하는 것이 좀 더 맞을 것 같다. )