쓰레드 - I/O 블락킹, 우선순위와 쓰레드 그룹

이의준·2024년 6월 13일

Java

목록 보기
73/87

쓰레드의 I/O 블락킹 (blocking)

  • 입출력시 작업 중단
public class imsi3 {
    public static void main(String[] args) {
        ThreadEx5_1 th1 = new ThreadEx5_1();
        th1.start();

        String input = JOptionPane.showInputDialog("아무 값이나 입력하세요.");
        System.out.println("입력하신 값은 " + input + "입니다.");
    }
}

class ThreadEx5_1 extends Thread {
    public void run() {
        for (int i = 10; i > 0 ; i--) {
            System.out.println(i);
            try {
                sleep(1000);
            } catch(Exception e) {}
        }
    }
}
  • 입출력시 I/O 블락킹에 의해 작업이 중단되는 것을 극복하기 위해 멀티쓰레드로 작성

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

  • 작업의 중요도에 따라 쓰레드의 우선수위를 다르게 하여 특정 쓰레드가 더 많은 작업시간을 갖게 할 수 있음
  • 자바에서는 쓰레드의 우선순위를 1~10으로 보유할 수 있게 함 (Windows OS에서는 32단계까지 있음)
  • 보통 우선순위 (기본값) : 5
void setPriority(int newPriority) // 쓰레드의 우선순위를 지정한 값으로 변경
int getPriority() // 쓰레드의 우선순위를 반환

public static final int MAX_PRIORITY = 10 // 최대 우선순위
public static final int MIN_PRIORITY = 1 // 최소 우선순위
public static final int NORM_PRIORITY = 5 // 보통 우선순위
  • 우선순위는 희망사항일 뿐 반드시 희망사항대로 되는 것은 아님 (확률적인 것일 뿐)
  • OS의 스케줄러는 해당 OS에서 돌아가는 모든 프로세스와 쓰레드에 평등해야 함

쓰레드 그룹

  • 서로 관련된 쓰레드를 그룹으로 묶어서 다루기 위한 것
  • 모든 쓰레드는 반드시 하나의 쓰레드 그룹에 포함되어 있어야 함
  • 쓰레드 그룹을 지정하지 않고 생성한 쓰레드는 '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() // 쓰레드 자신이 속한 쓰레드 그룹 반환
void uncaughtException(Thread f, Throwable e) // 처리되지 않은 예외에 의해 쓰레드 그룹의 쓰레드가 실행이 종료되었을 때, JVM에 의해 자동적으로 호출됨


쓰레드 그룹 메서드


메서드/설명설명
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)두 번째 매개변수에 true로 하면 쓰레드 그룹에 속한 하위 쓰레드 그룹의 쓰레드 또는 쓰레드 그룹까지 배열에 담는다
int enumerate(ThreadGroup[] list)쓰레드 그룹에 속한 쓰레드 그룹의 목록을 지정된 배열에 담고 그 개수를 반환
int enumerate(ThreadGroup[] list, boolean 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)쓰레드 그룹의 최대 우선순위를 설정

0개의 댓글