본문으로 바로가기

[JAVA] 데몬(daemon) 스레드 정리

category 프로그래밍/자바 2019. 1. 27. 16:56

자바에서 스레드는 각자의 작업이 끝날때까지 계속해서 작업을 하게 되어 있습니다.

그런데 곰곰이 생각해보면 필요에 따라서 계속 할 필요가 없는 스레드도 있습니다.

예를들어 구글 Docs에 자동 저장기능이 있습니다. 그 말은 자동 저장 기능이 별도의 쓰레드로 돌고 있다는 말이 됩니다.

그럼 구글 Docs가 끝나면 자동 저장 기능 쓰레드는 사라지는게 당연한게 아닐까요?

그래서 나온것이 데몬 스레드입니다.


데몬(daemon) 스레드


: 주 스레드의 작업을 돕는 보조적인 역할을 수행하는 스레드

: 주 스레드가 종료되면 데몬 스레드는 강제적으로 자동종료

 => 워드 프로세서의 자동저장, 미디어 플레이어의 동영상 및 음악재생,가비지 컬렉터


데몬 스레드 설정 방법

:주 스레드가 데몬이 될 스레드의 setDaemon(true)을 호출

: 반드시 start() 메소드 호출전에 setDaemon(true)을 호출

  => 그렇지 않으면 illegalThreadStateException 발생



예제)


AutoSaveThread.java


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
package AutoSaveThread;
 
public class AutoSaveThread extends Thread {
    public void save() {
        System.out.println("작업 내용을 저장함");
    }
    
    @Override
    public void run() {
        while(true) {
            try {
                Thread.sleep(500);
            } catch (InterruptedException e) {              
                break;
            }
            save();
        }        
    }
}
 
cs



DaemonExample.java


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
package AutoSaveThread;
 
public class DaemonExample {
 
    public static void main(String[] args) {
        AutoSaveThread autoSaveThread = new AutoSaveThread();
        autoSaveThread.setDaemon(true);
        autoSaveThread.start();
        
        try {
            Thread.sleep(5000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        
        System.out.println("메인 스레드 종료");
        
    }
 
}
 
cs


만약 7번째줄에 setDaemon을 하지 않으면 AutoSaveThread는 계속해서 작업을 하게 된다.

'프로그래밍 > 자바' 카테고리의 다른 글

람다식이란?  (0) 2019.01.28
[JAVA] 쓰레드풀(ThreadPoolExecutor) 정리  (0) 2019.01.27
Thread와 Process!!  (0) 2019.01.25
[자바] 네트워크 통신시 주의할점  (0) 2019.01.23
Network란 무엇인가?  (0) 2019.01.18