Java/Java 기초
[Java 기초] 데몬 스레드
메성
2020. 2. 21. 01:53
반응형
데몬 스레드
- 일반 스레드의 작업을 돕는 보조 스레드이다.
- 일반 스레드가 종료되면 데몬 스레드는 자동으로 종료된다. 이 점을 제외하고는 일반 스레드와 동일하다.
- 데몬 스레드의 예
- 가비지 컬렉터, 워드프로세서 자동 저장, 화면자동개신
- 데몬 스레드는 무한루프를 이용해 항시 대기하고 있다가 특정 조건에 만족하면 작업을 수행하고 다시 대기상태에 있는다.
데몬 스레드 관련 메소드
boolean isDaemon() //해당 스레드가 데몬 스레드인지 확인한다.
void setDaemon(boolean on) //파라미터 값이 true이면 스레드를 데몬스레드로 변경한다.
- setDeamon 메소드는 반드시 start()를 호출하기 전에 실행되어야 한다.
- 호출 후 실행되면 IllegalTrheadStateException이 발생한다.
public class ThreadEx4 implements Runnable {
static boolean autoSave = false;
public static void main(String [] args) {
Thread t = new Thread(new ThreadEx4());
//t.setDaemon(true); //얘가 없으면 종료되지 않는다.
t.start();
for(int i = 1; i < 5; i++) {
try{
Thread.sleep(1000);
} catch(InterruptedException e) {}
System.out.println(i);
if(i == 2) {
autoSave = true;
}
}
System.out.println("시스템 종료");
}
public void run() {
while(true) {
try {
Thread.sleep(3000);
} catch(InterruptedException e) {}
if(autoSave) {
autoSave();
}
}
}
public void autoSave() {
System.out.println("작업파일이 자동저장되었습니다.");
}
}
t.setDaemon(true) 사용
t.setDaemon(true) 사용안함
즉, 데몬 스레드를 사용하게 되면 일반 스레드(main)가 종료되었을 때 자동으로 데몬 스레드가 종료되기 때문에, 실행결과를 통해 데몬 스레드를 사용할 때와 사용하지 않을 때의 차이를 확인할 수 있다.
실행중인 모든 호출스택 출력
//getAllStackTraces() 사용
Map map = getAllStackTraces();
Iterator it = map.keySet().iterator();
- 해당 메소드(getAllStackTraces)를 사용하면 실행 중 또는 대기상태를 호출할 수있다.(작업이 완료되지 않은 모든 스레드의 호출 스택을 확인할 수 있다.)
- 프로그램을 실행하면 JVM은 가비지 컬렉션, 이벤트처리, 그래픽 처리 등 프로그램이 실행되는데 필요한 보조작업을 수행하는 데몬 스레드를 자동적으로 생성해서 실행시킨다.
- 그리고 이 들(데몬 스레드)은 Sytem Thread Group or Main Thread Group 에 속한다.
반응형