앞서 살펴본 스레드 그룹 사용 예제를 살펴보도록 하겠습니다.
// 1초 주기로 save() 메서드를 호출하는 데몬 스레드
public class AutoSaveThread extends Thread {
public void save() {
System.out.println("작업 내용 저장");
}
@Override
public void run() {
while(true) {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
break;
}
save();
}
}
}
import java.awt.Toolkit;
import java.util.Map;
import java.util.Set;
public class ExampleMain {
public static void main(String[] args) {
AutoSaveThread autoSaveThread = new AutoSaveThread();
autoSaveThread.setName("AutoSaveThread");
autoSaveThread.setDaemon(true);
autoSaveThread.start();
Map<Thread,StackTraceElement[]> map = Thread.getAllStackTraces();
Set<Thread> threads = map.keySet();
for(Thread thread : threads) {
System.out.println( "Name: " + thread.getName() + ( (thread.isDaemon() )?"(데몬)": "(주)") );
System.out.println( "\t" + "소속그룹: " + thread.getThreadGroup().getName() );
System.out.println();
}
}
}
/* 출력
Name: main(주)
소속그룹: main
Name: Attach Listener(데몬)
소속그룹: system
Name: Notification Thread(데몬)
소속그룹: system
Name: Signal Dispatcher(데몬)
소속그룹: system
Name: Common-Cleaner(데몬)
소속그룹: InnocuousThreadGroup
Name: Finalizer(데몬)
소속그룹: system
Name: Reference Handler(데몬)
소속그룹: system
Name: AutoSaveThread(데몬)
소속그룹: main
*/
실행 결괄르 통해서 살펴보면, 가비지 컬렉션을 담당하는 Finalizer, Reference Handler 등의 일부 스레드는 system 그룹에 속합니다. 그리고 main( ) 메서드를 실행하는 main 스레드는, system 하위 그룹인 main그룹에 속하게 됩니다. 참고로 main 스레드가 실행한 AutoSaveThread는 main 스레드가 소속된 main 그룹에 포함됩니다.
'Programming > JAVA' 카테고리의 다른 글
멀티 스레드(8) - 스레드 그룹 4 (0) | 2024.12.30 |
---|---|
멀티 스레드(8) - 스레드 그룹 3 (1) | 2024.12.27 |
멀티 스레드(8) - 스레드 그룹 1 (0) | 2024.12.18 |
멀티 스레드(7) - 데몬 스레드 2 (0) | 2024.12.17 |
멀티 스레드(7) - 데몬 스레드 1 (0) | 2024.12.16 |