Programming/Java

[Java 자바] 12. 멀티 스레드 ③ 데몬 스레드, 스레드 그룹

erinh 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()를 할 필요 없이 일괄적으로 실행 가능

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

반응형