ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Java 자바] 12. 멀티 스레드 ③ 데몬 스레드, 스레드 그룹
    Programming/Java 2022. 9. 12. 15:39
    반응형

    12-7. 데몬 스레드

    - 주 스레드의 작업을 돕는 보조적 역할을 수행하는 스레드로, 주 스레드가 종료되면 강제적으로 종료됨

    - setDaemon(true)를 호출함으로써 스레드를 데몬으로 만들 수 있음

    - start() 메소드 이후 setDaemon(true)를 호출하면 IllegalThreadStateException이 발생하므로 이전에 호출해야 함

    - isDaemon(): 실행 중인 스레드가 데몬스레드인지 아닌지 확인

    public static void main(String[] args) {
      AutoSaveThread thread = new AutoSaveThread();
      thread.setDaemon(true);
      thread.start();
      ...
    }

    12-8. 스레드 그룹

    - 관련된 스레드를 묶어 관리할 목적으로 이용
    - 명시적으로 스레드 그룹에 포함시키지 않으면, 기본적으로 자신을 생성한 스레드와 같은 스레드 그룹에 속하게 됨

    12-8-1. 스레드 그룹 이름 얻기

    // 현재 스레드가 속한 스레드 그룹의 이름 얻기
    ThreadGroup group = Thread.currentThread().getThreadGroup();
    String groupName = group.getName();
    
    // 프로세스 내에서 실행하는 모든 스레드에 대한 정보 얻기
    Map<Thread, StackTraceElement[]> map = Thread.getAllStackTraces();

    12-8-2. 스레드 그룹 생성

    - 명시적으로 스레드 그룹을 만들고 싶을 경우, ThreadGroup 객체 생성을 통해 만들 수 있음

    // 1. ThreadGroup 이름만 전달 (현재 스레드가 속한 그룹의 하위 그룹으로 생성됨)
    ThreadGroup tg = new ThreadGroup(String name);
    
    // 2. 부모 ThreadGroup을 지정
    ThreadGroup tg = new ThreadGroup(ThreadGroup parent, String name);
    
    // 3. 새로운 스레드 그룹 생성 후, 이 그룹에 스레드를 포함하는 방법
    Thread t = new Thread(ThreadGroup group, Runnable target);
    Thread t = new Thread(ThreadGroup group, Runnable target, String name);
    Thread t = new Thread(ThreadGroup group, Runnable target, String name, logn stackSize);
    Thread t = new Thread(ThreadGroup group, String name);

    12-8-3. 스레드 그룹의 일괄 interrupt()

    - 스레드 그룹을 사용하면, 개별 스레드를 모두 종료하기 위해 각각의 스레드에서 interrupt()를 할 필요 없이 일괄적으로 실행 가능

    - 단, 개별 스레드의 예외처리는 하지 못하므로, 안전한 종료를 위해서는 개별 스레드가 예외처리를 해야 함

    반응형

    댓글

Designed by Tistory.