Java 쓰레드의 우선순위, 쓰레드 그룹
by 볼빵빵오춘기쓰레드의 우선순위
작업의 중요도에 따라 쓰레드의 우선순위를 다르게 하여 특정 쓰레드가 더 많은 작업시간을 갖게 할 수 있다.
⇒ 자바에서는 1~10까지 우선순위를 매길 수 있다.
⇒ 쓰레드를 만들고 우선순위를 정해주지 않으면 5로 지정된다.
⇒ 사실은 os에 맞춰 돌아가게된다.
우리가 써준 우선순위는 희망사항에 불가하다. 희망사항을 os스케쥴러에게 전달하는 것 뿐이다.
예제 코드
import java.util.*;
import javax.swing.JOptionPane;
public class Try {
static long startTime = 0;
public static void main(String[] args) {
ThreadEx6_1 th1 = new ThreadEx6_1();
ThreadEx6_2 th2 = new ThreadEx6_2();
// th1.setPriority(5); => 5로 넣을 경우 생략가능
th2.setPriority(7);
System.out.println("Priority of th1(-) : " + th1.getPriority());
System.out.println("Priority of th2(|) : " + th2.getPriority());
th1.start();
th2.start();
}
}
class ThreadEx6_1 extends Thread {
public void run() {
for(int i=0; i < 300; i++) {
System.out.print("-");
for(int x=0; x < 10000000; x++);
}
}
}
class ThreadEx6_2 extends Thread {
public void run() {
for(int i=0; i < 300; i++) {
System.out.print("|");
for(int x=0; x < 10000000; x++);
}
}
}
Priority of th1(-) : 5
Priority of th2(|) : 7
-|-|-----------------------------------------------------------------------------------------------------------------------------------------------|||||||||----|||||||||---------------------------------------------------------------------------------------|||||||||||||||-----------------||||||||||||||||||||||||--|-|-|-|-------------------------|||||||||||||||||||||||||||--------||---------||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
⇒ 결과값을 보면 우선순위는 그냥 희망사항… 일 뿐
쓰레드 그룹
- 서로 관련된 쓰레드를 그룹으로 묶어서 다루기 위한 것이다.
- 모든 쓰레드는 반드시 하나의 쓰레드 그룹에 포함되어 있어야 한다.
🤔 여태 우리는 쓰레드 생성해서 쓸 때 그룹을 설정해준적이 없다.
why? 쓰레드 그룹을 지정하지 않고 생성한 쓰레드는 ‘main쓰레드 그룹’에 속한다. - 자신을 생성한 쓰레드(부모 쓰레드)의 그룹과 우선순위를 상속받는다.
쓰레드 그룹의 메서드
- ThreadGroup(String name)
지정된 이름의 새로운 쓰레드 그룹을 생성한다.
- ThreadGroup(ThreadGroup parent,String name)
지정된 쓰레드 그룹에 포함되는 새로운 쓰레드 그룹을 생성한다.
- int activeCount()
쓰레드 그룹에 포함된 활성상태에 있는 쓰레드의 수를 반환한다.
- int activeGroupCount()
쓰레드 그룹에 포함된 활성상태에 있는 쓰레드 그룹의 수를 반환한다.
- void checkAccess()
현재 실행중인 쓰레드가 쓰레드 그룹을 변경할 권한이 있는지 체크한다.
- void destroy()
쓰레드 그룹과 하위 쓰레드 그룹까지 모두 삭제한다.(단, 비어있어야 삭제가능)
- int enumerate(Thread[] list)
int enumerate(Thread[] list, boolean recurse)
int enumerate(ThreadGroup[] list)
int enumerate(ThreadGroup[] list, boolean recurse)
쓰레드 그룹에 속한 쓰레드 또는 하위 쓰레드 그룹의 목록을 지정된 배열에 담고 그 개수를 반환한다.
두 번째 매겨변수인 recurse의 값을 true로 하면 쓰레드 그룹에 속한 하위 쓰레드 그룹에 쓰레드 또는 쓰레드 그룹까지 배열에 담는다.
- int getMaxPriority()
쓰레드 그룹의 최대우선순위를 반환한다.
- String getName()
쓰레드 그룹의 이름을 반환한다.
- ThreadGroup getParent()
쓰레드 그룹의 상위 쓰레드 그룹을 반환한다.
- void interrupt()
쓰레드 그룹에 속한 모든 쓰레드를 interrupt
- boolean isDaemon()
쓰레드 그룹이 데몬 쓰레드 그룹인지 확인
- boolean isDestroyed()
쓰레드 그룹이 삭제되었는지 확인
- void list()
쓰레드 그룹에 속한 쓰레드와 하위 쓰레드 그룹에 대한 정보를 출력한다.
- boolean parentOf(ThreadGroup g)
지정된 쓰레드 그룹의 상위 쓰레드 그룹인지 확인한다.
- void setDaemon(boolean daemon)
쓰레드 그룹을 데몬 쓰레드 그룹으로 설정/해제한다.
- void setMaxPriority(int pri)
쓰레드 그룹의 최대 우선순위를 설정
'👩🏻💻 About 프로그래밍 > Java' 카테고리의 다른 글
Java 쓰레드의 실행제어 메서드 (0) | 2023.12.09 |
---|---|
Java 데몬쓰레드(deomon thread), 쓰레드의 상태 (0) | 2023.12.09 |
Java 싱글쓰레드와 멀티 쓰레드, 쓰레드의 I/O 블락킹 (1) | 2023.12.09 |
Java 쓰레드의 구현과 실행 (0) | 2023.12.09 |
Java 프로세스, 쓰레드(process & thread) (1) | 2023.12.09 |
블로그의 정보
Hello 춘기's world
볼빵빵오춘기