[Java] 데몬 스레드

나른한 개발자·2026년 1월 1일

f-lab

목록 보기
9/44

데몬 스레드

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();
        }
    }
}

데몬 스레드를 사용하는 이유

  • 주 작업과는 별도로 실행되어야하는 비교적 중요도가 낮은 작업들을 실행해야할 때 사용한다.
  • 주 스레드가 종료되면 자동으로 종료되기 때문에 개발자가 직접 관리하지 않아도 된다. (JVM이 알아서 생명주기를 관리해준다)
  • 백그라운드 서비스를 제공하여, 모니터링이나 GC, 화면 갱신과 같은 기능에 최적화 되어있다.
  • 데몬 스레드가 아닌 일반 스레드로 모든 작업을 처리하면 스레드가 전체 종료될때까지 기다려야하므로 애플리케이션 종료 시간이 길어질 수 있다. 또한 주 스레드가 종료되어 더이상 필요없어진 작업임에도 스레드가 계속 살아있어서 시스템 자원이 낭비됩니다.

데몬 스레드는 주 스레드를 보조하는 작업을 하는 스레드입니다. 주 스레드가 종료되면 데몬 스레드도 같이 종료가 되어 개발자가 직접 관리해주지 않아도 된다. 주 작업과는 별도로 실행되어야하는 비교적 중요도가 낮은 작업을 실행해야할 때 사용한다. GC나 화면갱신, 로그와 같은 기능은 데몬 스레드로 처리하면 좋다.

profile
Start fast to fail fast

0개의 댓글