스레드 우선순위
더보기
- 자바의 스레드 스케쥴링은 우선순위(Priority)방식과 라운드 로빈(Round-robin) 방식을 사용한다.
1) 우선순위(Priority) 방식
- 우선순위가 높은 스레드가 실행 상태를 더 많이 가지도록 스케쥴링 하는 것
- 우선순위를 부여하여 코드로 제어가 가능하다.
2) 라운드 로빈(Round-robin) 방식
- 시간 할당량(Time Slice)을 정해서 스레드를 정해진 시간만큼 실행시키고 다른 스레드를 실행하는 방식
- JVM에 의해 정해지므로 코드로 제어할 수 없다.
- 스레드는 우선순위를 나타내는 필드(priority)를 가지고 있다. 1~10 사이의 값을 갖는다. (10: 가장 높음)
- 자바 런타임 스케줄러는 현재 실행 가능한 스레드들 중에서 우선순위가 가장 높은 스레드를 실행시켜 주는데, 현재 실행중인 스레드보다 더 높은 우선순위를 갖는 스레드가 실행가능 상태가 되면 자바 런타임 스케줄러는 우선순위가 더 높은 스레드를 실행시켜 준다.
- 스레드 우선 순위는 스레드를 생성한 스레드로부터 상속 받는다. main() 메소드에서 스레드를 생성하면 main() 메소드의 우선 순위가 5이므로 자동으로 5를 갖는다.
Ex007_Priority >>
더보기
![](https://blog.kakaocdn.net/dn/wtyUp/btreiQC31EP/gc5hdFFr5L9mfpzy2cbegK/img.png)
package threadEx;
public class Ex007_Priority {
public static void main(String[] args) {
MyThread7 t1 = new MyThread7("A");
MyThread7 t2 = new MyThread7("B");
MyThread7 t3 = new MyThread7("C");
t1.setPriority(Thread.MIN_PRIORITY); // 1
t2.setPriority(Thread.MAX_PRIORITY); // 10
t1.start();
t2.start();
t3.start();
}
}
class MyThread7 extends Thread {
public MyThread7(String name) {
super(name);
}
@Override
public void run() {
for (int i = 1; i <= 20; i++) {
// System.out.println(getName() + " -> " + i);
System.out.println(this); // [스레드명, 우선순위, 그룹]
}
}
}
몇 번 실행시켜보면 우선순위가 높은 B부터 일처리를 하는 것을 알 수 있다.
![](https://blog.kakaocdn.net/dn/wtyUp/btreiQC31EP/gc5hdFFr5L9mfpzy2cbegK/img.png)
'쌍용강북교육센터 > 9월' 카테고리의 다른 글
0907_Java : java.net.InetAddress, java.net.URL 클래스 (0) | 2021.09.08 |
---|---|
0906_Java : Thread Synchronization 동기화 (0) | 2021.09.07 |
0903_Java : Daemon Thread (0) | 2021.09.07 |
0903_Java : Thread 클래스 활용 예제 (0) | 2021.09.07 |
0903_Java : java.lang.Thread 스레드 클래스 (0) | 2021.09.07 |