/ JAVAJUNGSUK

Ch13-14~17. thread group

자바의 정석 기초편

0. 목차



Chapter13. 쓰레드

Ch13 - 14. 쓰레드의 우선순위

Ch13 - 15. 쓰레드의 우선순위 예제

Ch13 - 16. 쓰레드 그룹(thread group)

Ch13 - 17. 쓰레드 그룹(thread group)의 메서드



Ch13 - 14. 쓰레드의 우선순위


▶ 쓰레드의 우선순위(priority of thread)란?

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


▶ 쓰레드의 우선순위(priority of thread) 지정

▷ 쓰레드의 우선순위를 지정한 값으로 변경
void setPriority(int newPriority)

// 예를 들어
void setPriority(int 7) 이렇게 하면, 우선순위 : 7


▷ 우선순위의 범위 : 1 ~ 10
▷ 우선순위를 지정하지 않으면, 보통 우선순위 ‘5’로 지정
public static final int MAX_PRIORITY = 10 // 최대 우선순위
public static final int MIX_PRIORITY = 10 // 최소 우선순위
public static final int NORM_PRIORITY = 5 // 보통 우선순위


▶ 쓰레드의 우선순위(priority of thread) 반환

▷ 쓰레드의 우선순위를 알고 싶을 때
int getPriority()


▶ OS 스케쥴러가 보는 우선순위

▷ OS 스케쥴러에게 우선순위를 보여주는 건 희망사항
▷ 윈도우 OS의 경우 32단계의 우선순위가 존재
▷ 모든 프로그램을 관할하는 OS가 볼 때 우리가 지정한 우선순위는 참고 정도
▷ OS에서 이클립스 우선순위를 높이는 방법




Ch13 - 15. 쓰레드의 우선순위 예제


▶ 우선순위 지정

▷ 우선순위가 높다 = 확률적으로 선행 될 가능성이 높다
▷ 우선순위가 높다 ≠ 반드시 선행 된다
class Ex13_6 {
	public static void main(String args[]) {
		ThreadEx6_1 th1 = new ThreadEx6_1();
		ThreadEx6_2 th2 = new ThreadEx6_2();

		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++);
        }
    }
}
▷ console



Ch13 - 16. 쓰레드 그룹(thread group)


▶ 쓰레드 그룹(thread group)이란?

▷ 서로 관련된 쓰레드를 그룹으로 묶어서 다룸
▷ 모든 쓰레드는 반드시 하나의 쓰레드 그룹에 포함되어 있어야 함
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)
▷ 쓰레드 그룹을 지정하지 않고 쓰레드 생성 시, main 쓰레드 그룹에 속함
▷ 자신을 생성한 쓰레드(부모 쓰레드)의 그룹과 우선순위를 상속받음


▶ 쓰레드 그룹 반환

▷ 쓰레드 자신이 속한 쓰레드 그룹을 반환
▷ getThreadGroup()은 Thread 클래스에 존재
ThreadGroup getThreadGroup()


▶ 쓰레드 그룹 반환

▷ 원래 예외가 처리되지 않으면 JVM이 처리
▷ 처리되지 않은 예외에 의해 쓰레드 그룹의 쓰레드가 실행 종료되었을 때,
▷ JVM에 의해 이 메서드가 자동적으로 호출 됨
▷ uncaughtException()은 ThreadGroup 클래스에 존재
void uncaughtException(Thread t, Throwable e)


Ch13 - 17. 쓰레드 그룹(thread group)의 메서드


쓰레드 단위 뿐만 아니라 쓰레드 그룹 단위로도 설정 가능

▶ ThreadGroup(String name)

▷ 지정된 이름의 새로운 쓰레드 그룹을 생성


▶ ThreadGroup(ThreadGroup parents, 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)

▷ 쓰레드 그룹의 최대 우선순위를 설정