[Java] 13. 데몬쓰레드(Daemon Thread)


데몬쓰레드(Daemon Thread)에 대한 포스팅이다.



01. 데몬쓰레드(Daemon Thread)

쓰레드는 사용자 쓰레드(user thread)데몬 쓰레드(daemon thread)로 2종류로 나눠진다.

데몬 쓰레드는 다른 일반 쓰레드의 작업을 돕는 보조적인 역할을 수행하는 쓰레드이다. 일반 쓰레드가 모두 종료되면 데몬 쓰레드는 강제적으로 종료되는 개념이다. 왜냐하면 데몬쓰레드는 일반쓰레드의 보조역할이기 떄문에 일반쓰레드가 모두 종료되면 데몬쓰레드는 존재 의미가 없다.


데몬쓰레드는 예로 가비지 컬렉터, 워드프로세서의 자동저장, 화면자동갱신 등 주요 업무의 보조역할 기능에 사용된다.


boolean isDaemon()  //데몬쓰레드인지 확인(데몬쓰레드면 true 반환)
void setDaemon(boolean on)  //데몬쓰레드로 실행하려면 "true" 값 설정



데몬쓰레드 예제

public class ExDaemonThread implements Runnable {

    static boolean autoSave = false;

    public static void main(String... args) {
        Thread t = new Thread(new ExDaemonThread());
        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);
            } catch (InterruptedException e) {}

            if(autoSave) autoSave();
        }
    }

    public void autoSave() {
        System.out.println("작업파일이 자동저장되었습니다.");
    }
}
1
2
3
4
5
작업파일이 자동저장되었습니다.
6
7
8
작업파일이 자동저장되었습니다.
9
10
메인쓰레드 종료




[출처]

  • 자바의정석 (저자: 남궁성)