Programming/Java

[Java] 쓰레드(Thread) - 4(데몬 쓰레드)

kmindev 2023. 12. 10. 20:06

남궁성님의 Java의 정석(3rd Edition)을 보고 정리한 글입니다.

 

데몬 쓰레드(Daemon thread)

  • 일반 스레드의 작업을 돕는 스레드(보조)
  • 일반 스레드가 종료되면 데몬스레드는 자동 종료
  • 주로 무한루프와 조건문을 이용해서 실행 후 대기하고 있다가 특정 조건에서 다시 수행
boolean isDaemon() // 데몬 스레드일 경우 true

void setDaemon(boolean on) // true일 경우 데몬스레드가 된다.

threadEx th = new threadEx();
th.setDaemon(true) // 데몬 스레드
th.start(); // 데몬 스레드 시작 

 

 

데몬 쓰레드 예제

public class DaemonThreadEx implements Runnable {
    static boolean autoSave = false;

    public static void main(String[] args) {
        Thread t = new Thread(new DaemonThreadEx());
        t.setDaemon(true);
        t.start();

        for (int i = 1; i <= 10; i++) {
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
            }
            System.out.println(i);

            if (i == 5)
                autoSave = true;
        }

        System.out.println("프로그램 종료");
    }

    @Override
    public void run() {
        while (true) { // 무한루프
            try {
                Thread.sleep(3000); // 3초마다
            } catch (InterruptedException e) {}

            if(autoSave) {
                autoSave();
            }
        }
    }

    public void autoSave() {
        System.out.println("작업파일이 자동저장되었습니다.");
    }
}

실행결과
1
2
3
4
5
작업파일이 자동저장되었습니다.
6
7
8
작업파일이 자동저장되었습니다.
9
10
프로그램 종료
  • 데몬 쓰레드로 설정하지 않았으면, main 메서드 종료 여부에 상관없이 autoSave()가 계속 호출되어 프로그램이 종료되지 않았을 것이다.