Daemon이란 보통 백그라운드에서 사용자 개입없이 실행되는 프로그램을 말한다.
자바에서의 스레드는 일반 사용자 스레드와 데몬 스레도로 나뉘다. 데몬 스레드는 주 스레드를 보조하는 역할을 수행하는 스레드를 말한다. 주 스레드가 종료되면 데몬 스레드도 자동으로 종료된다.
프로그램의 핵심 동작은 주 스레드에서 동작하고 모니터링, GC, 로그, 타이머 등의 보조 작업은 데몬 스레드에서 종료되면 좋다.
하지만 네트워크 연결 종료와 같이 반드시 종료되어야하는 동작은 데몬 스레드에서 실행하면 안된다. (주 스레드가 종료되면 바로 종료되기 때문)
public class DaemonThreadExample {
public static void main(String[] args) {
Thread daemonThread = new Thread(() -> {
while (true) {
try {
System.out.println("데몬 쓰레드가 실행 중...");
Thread.sleep(1000); // 1초 동안 대기
} catch (InterruptedException e) {
e.printStackTrace();
}
}
});
daemonThread.setDaemon(true); // 이 쓰레드를 데몬 쓰레드로 설정
daemonThread.start(); // 데몬 쓰레드 시작
try {
System.out.println("주 쓰레드가 3초 동안 실행됩니다...");
Thread.sleep(3000); // 주 쓰레드를 3초 동안 실행
System.out.println("주 쓰레드 종료.");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
데몬 스레드는 주 스레드를 보조하는 작업을 하는 스레드입니다. 주 스레드가 종료되면 데몬 스레드도 같이 종료가 되어 개발자가 직접 관리해주지 않아도 된다. 주 작업과는 별도로 실행되어야하는 비교적 중요도가 낮은 작업을 실행해야할 때 사용한다. GC나 화면갱신, 로그와 같은 기능은 데몬 스레드로 처리하면 좋다.