Notice
Recent Posts
Recent Comments
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
Archives
Today
Total
관리 메뉴

충분히 쌓여가는

쓰레드의 우선순위, 쓰레드 그룹 본문

Java/JAVA3

쓰레드의 우선순위, 쓰레드 그룹

빌드이너프 2023. 8. 3. 17:05

쓰레드의 우선순위(priortiy of thread)

작업의 중요도에 따라 쓰레드의 우선순위를 다르게 하여 특정 쓰레드가 더 많은 작업시간을 갖게 할 수 있다

희망사항일 뿐 OS안에서 꼭 우선순위대로 동작하지는 않는다

void setPriority(int newPriority) // 쓰레드의 우선순위를 지정한 값으로 변경한다
int getPriority() // 쓰레드의 우선순위를 반환한다

public static final int MAX_PRIORITY = 10 // 최대 우선순위
public static final int MAX_PRIORITY = 1 // 최소 우선순위
public static final int MAX_PRIORITY = 5 // 보통 우선순위

코드

실행할 때마다 결과는 다르게 나오며 ThreadTest_2가 먼저 끝날거라는 보장이 없다

class ThreadTest {
    public static void main(String args[]) {
        ThreadTest_1 th1 = new ThreadTest_1();
        ThreadTest_2 th2 = new ThreadTest_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 ThreadTest_1 extends Thread {
    public void run() {
        for(int i=0; i < 300; i++) {
            System.out.print("-");
            for(int x=0; x < 10000000; x++); // 시간지연용 for문
        }
    }
}

class ThreadTest_2 extends Thread {
    public void run() {
        for(int i=0; i < 300; i++) {
            System.out.print("|");
            for(int x=0; x < 10000000; x++); // 시간지연용 for문
        }
    }
}


쓰레드 그룹

서로 관련된 쓰레드를 그룹으로 묶어서 다루기 위한 것

모든 쓰레드는 반드시 하나의 쓰레드 그룹에 포함되어 있어야 한다

쓰레드 그룹을 지정하지 않고 생성한 쓰레드는 'main 쓰레드 그룹'에 속한다

자신을 생성한 쓰레드(부모 쓰레드)의 그룹과 우선순위를 상속받는다

Thread(ThreadGroup group, String name)
Thread(ThreadGroup group, Runnable target)
Thread(ThreadGroup group, Runnable target, String name)
Thread(ThreadGroup group, Runnable target, String name, long stackSize)

 

// 쓰레드 자신이 속한 쓰레드 그룹을 반환한다
ThreadGroup getThreadGroup()

// 처리되지 않은 예외에 의해 쓰레드 그룹의 쓰레드가 실행이 종료되었을 때, JVM에 의해 이 메서드가 자동적으로 호출된다
void uncaughtException(Thread t, Throwable e)

 

쓰레드 그룹의 메서드

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) 쓰레드 그룹의 최대 우선순위를 결정