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()를 할 필요 없이 일괄적으로 실행 가능
- 단, 개별 스레드의 예외처리는 하지 못하므로, 안전한 종료를 위해서는 개별 스레드가 예외처리를 해야 함
반응형