본문 바로가기

Programming/JAVA

멀티 스레드(8) - 스레드 그룹 2

 

 

 

 

 

앞서 살펴본 스레드 그룹 사용 예제를 살펴보도록 하겠습니다. 

 

// 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 그룹에 포함됩니다.