프로그래밍 세계에서 이름에 데몬이 붙어있으면 백드라운드에서 실행되는 프로세스나 서비스를 의미합니다.
Java에서 스레드는 일반 사용자 스레드와 데몬 스레드로 나눌 수 있습니다.
데몬 스레드는 일반 사용자 스레드를 지원하거나 특정 작업을 백그라운드에서 수행하는 역할을 합니다
데몬 스레드의 가장 큰 특징은 일반(메인) 스레드가 모두 종료되면 데몬 스레드는 자동으로 일을 중단하고 강제 종료된다는 점입니다.
또한 백그라운드에서 일반 스레드를 도와주는 보조적인 역할을 수행합니다
프로그램의 핵심이 되는 작업은 일반 스레드에서 진행하고 모니터링, GC, 자동 저장, 로그, 타이머 등의 보조 작업은 데몬스레드에서 진행하도록 하면 좋습니다.
위와 같은 작업은 매번 실행할 필요없이 실행 대기 상태에 있다가 필요할 때만 동작한다는 특징이 있습니다.
이런 보조 작업에 더 적합한 특징 때문에 일반적으로 중요한 기능은 데몬 스레드에서 개발하지 않습니다.
데몬 스레드를 만들려면 아래와 같은 방법으로 설정할 수 있습니다
public class DaemonThreadExample {
public static void main(String[] args) {
Thread daemonThread = new Thread(() -> {
while (true) {
System.out.println("데몬 스레드가 실행 중입니다.");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
});
daemonThread.setDaemon(true); // 데몬 스레드로 설정
daemonThread.start();
System.out.println("메인 스레드가 종료됩니다.");
}
}
thread 인스턴스를 통해 setDaemon(true) 메서드를 호출하면 일반 스레드가 아닌 데몬 스레드로 설정하여 실행하겠다는 의미입니다.
현재 thread 가 일반 스레드인지 데몬 스레드인지 확인 하는 방법은 아래와 같습니다
boolean isDaemon = thread.isDaemon()
주의사항
데몬 스레드는 애초에 보조적인 역할로 설계되었기 때문에 중요한 작업은 데몬 스레드에서 수행하지 않도록 하는 게 좋습니다
일반 스레드가 모두 종료될때 강제로 데몬 스레드도 종료되므로 파일 저장, 네트워크 연결 종료 등 반드시 정상적으로 완료되어야 할 작업을 데몬 스레드에서 실행하지 않도록 하는 게 좋습니다
정리
Java 에서 스레드는 일반 스레드와 데몬 스레드로 나눌 수 있습니다
일반 스레드가 작업이 끝날 때까지 계속 실행되는 것과 달리 데몬 스레드는 일반 스레드가 종료되면 강제로 종료됩니다
일반 스레드와 비슷한 기능과 사용방법을 가지고 있지만, 차이점도 알고 사용하면 좋을 것 같습니다
'Java' 카테고리의 다른 글
[Java] JVM 구조 이해하기, JVM을 알아야 하는 이유 (1) | 2024.11.15 |
---|---|
[Java] List(ArrayList)에서 add, set 메서드 차이점 (0) | 2024.11.14 |
[Java] Thread 종료하는 방법, interrupt() 메서드 동작 방식 (3) | 2024.11.05 |
[Java] 빈 문자열 체크 방법 정리(isEmpty, isBlank, equals("") 차이점) (0) | 2024.10.31 |
[Java] 문자열을 대소문자 구분 없이 비교하는 방법, equalsIgnoreCase()와 compareToIgnoreCase() 차이점 (1) | 2024.10.28 |
댓글