데몬 스레드(daemon thread)는 자바에서 낮은 우선순위로 백그라운드에서 실행되는 스레드입니다. 주로 JVM이 가비지 컬렉션(Garbage Collection, GC)과 같은 백그라운드 작업을 수행하기 위해 생성합니다. 사용자 스레드(user thread)가 하나도 남아 있지 않다면, 데몬 스레드가 아직 실행 중이더라도 JVM은 프로그램을 종료할 수 있습니다. 즉, 데몬 스레드의 유일한 존재 목적은 사용자 스레드를 보조하는 것입니다.
isDaemon() 메소드를 사용하면 현재 스레드가 데몬 스레드인지 아닌지 손쉽게 확인할 수 있습니다.
문법
public boolean isDaemon()
이 메소드는 스레드가 데몬 스레드이면 true, 일반 사용자 스레드이면 false를 반환합니다.
예제 코드
class SampleThread implements Runnable {
public void run() {
if(Thread.currentThread().isDaemon())
System.out.println(Thread.currentThread().getName()+"은 데몬 스레드입니다");
else
System.out.println(Thread.currentThread().getName()+"은 사용자 스레드입니다");
}
}
// 메인 클래스
public class DaemonThreadTest {
public static void main(String[] args){
SampleThread st = new SampleThread();
Thread th1 = new Thread(st,"Thread 1");
Thread th2 = new Thread(st,"Thread 2");
th2.setDaemon(true); // th2 스레드를 데몬으로 설정
th1.start();
th2.start();
}
}실행 결과
Thread 1은 사용자 스레드입니다 Thread 2은 데몬 스레드입니다
주의 사항
스레드를 데몬으로 지정하려면 setDaemon(true) 메소드를 반드시 start() 메소드 호출 이전에 실행해야 합니다. 스레드가 이미 시작된 후에 setDaemon()을 호출하면 IllegalThreadStateException 예외가 발생합니다.