logo

자바 데몬 스레드

데몬 스레드는 프로그램 실행이 완료될 때 JVM이 종료되는 것을 방지하지 않는 우선순위가 낮은 백그라운드 스레드입니다.

  • 데몬 스레드는 사용자 스레드를 지원하기 위해 백그라운드에서 실행됩니다.
  • 모든 사용자(비데몬) 스레드가 완료되면 JVM이 자동으로 종료됩니다.
  • 동일한 Thread 클래스를 사용하여 생성되지만 setDaemon(true) 메서드를 사용하여 데몬으로 표시됩니다.
  • 스레드가 시작되기 전에 setDaemon(true) 메소드를 호출해야 합니다.
  • 일반적인 예로는 Garbage Collector 및 Finalizer Thread가 있습니다.

통사론

Java
thread.setDaemon(true); 

사용 사례

  1. 쓰레기 수거: Java의 GC(가비지 수집기)는 데몬 스레드로 실행됩니다.
  2. 백그라운드 모니터링: 데몬 스레드는 애플리케이션 구성 요소 리소스 또는 연결 상태를 모니터링할 수 있습니다.
  3. 로깅 및 감사 서비스: 데몬 스레드를 사용하여 백그라운드 활동을 지속적으로 기록할 수 있습니다.
  4. 정리 작업: 데몬 스레드는 주기적으로 임시 파일을 지워 사용하지 않는 리소스를 해제하거나 캐시 정리를 수행할 수 있습니다.
  5. 스케줄러 또는 타이머 작업: 백그라운드 스케줄러는 데몬 스레드를 사용하여 고정된 간격으로 작업을 트리거하는 경우가 많습니다.

사용된 방법

  • 무효 setDaemon(부울 켜짐): 스레드를 데몬 또는 사용자 스레드로 표시합니다. start() 전에 호출해야 합니다.
  • 부울 isDaemon(): 스레드가 데몬인지 확인합니다.

데몬 스레드 생성

Java
public class DaemonExample extends Thread {  public void run() {  if (Thread.currentThread().isDaemon()) {  System.out.println('Daemon thread running...');  } else {  System.out.println('User thread running...');  }  }  public static void main(String[] args) {  DaemonExample t1 = new DaemonExample();  DaemonExample t2 = new DaemonExample();  t1.setDaemon(true); // must be set before start()  t1.start();  t2.start();  } } 

산출
Daemon thread running... User thread running... 

데몬 스레드의 동작

Java
public class DaemonBehavior extends Thread {  public void run() {  while (true) {  System.out.println('Daemon thread running...');  }  }  public static void main(String[] args) {  DaemonBehavior t = new DaemonBehavior();  t.setDaemon(true);  t.start();  System.out.println('Main (user) thread ends...');  } } 

산출
Main (user) thread ends... 

JVM은 데몬 스레드가 계속 실행 중이더라도 기본 스레드가 완료된 후 즉시 종료됩니다.

중요 사항

  • 스레드는 자신을 생성한 스레드의 데몬 상태를 상속합니다.
  • setDaemon(true) 메소드는 start() 이후에 호출되면 IllegalThreadStateException을 발생시킵니다.
  • 파일 쓰기, 데이터베이스 업데이트 등 완료가 필요한 작업에는 데몬 스레드를 사용하면 안 됩니다.
  • JVM은 정리 작업을 수행하지 않고 모든 데몬 스레드를 갑자기 종료합니다.

사용자 스레드와 데몬 스레드의 차이점

기초사용자 스레드데몬 스레드
목적주요 애플리케이션 작업을 실행합니다.백그라운드 서비스 수행
수명주기완료될 때까지 JVM을 활성 상태로 유지합니다.모든 사용자 스레드가 완료되면 종료됩니다.
우선 사항일반적으로 더 높음보통 더 낮음
JVM 종료JVM이 완료될 때까지 기다립니다.JVM이 실행 중인데도 종료됩니다.
기본 스레드 작업자 스레드가비지 수집기 배경 모니터
퀴즈 만들기