728x90
반응형

데몬 쓰레드 ( daemon thread )

데몬 쓰레드는 다른 일반 쓰레드(데몬 쓰레드가 아닌 쓰레드)의 작업을 돕는 보조적인 역할을 수행하는 쓰레드입니다. 반 쓰레드가 모두 종료되면 데몬 쓰레드는 강제적으로 자동 종료됩니다.
그 이유는  데몬 쓰레드는 일반 쓰레드의 보조역할을 수행하므로 일반 쓰레드가 모두 종료되고 나면 데몬 쓰레드의 존재의 의미가 없기 때문입니다.

데몬 쓰레드는 무한루프와 조건문을 이용해서 실행 후 대기하고 있다가 특정 조건이 만족되면 작업을 수행하고 다시 대기하도록 작성합니다.

데몬 쓰레드는 일반 쓰레드와 작성방법과 실행방법이 같으며 다만 쓰레드를 생성한 다음 실행하기 전에 setDaemon(true)를 호출하기만 하면 됩니다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
class ThreadEx implements Runnable{
    static boolean autoSave = false;
 
    public static void main(String[] args){
        Thread t = new Thread(new ThreadEx());
        t.setDaemon(true); // 사용자 쓰레드로 변경합니다. ( 이 부분이 없으면 종료되지 않습니다. )
        t.start();
 
        for(int i=1; i<=20; i++){
            try{
                // Thread.sleep() 쓰레드를 재우기 위한 함수 (단위 ms)
                Thread.sleep(1000); // 1초마다
            }catch(InterruptedException e){ }
            
            System.out.println(i);
            if(i == 5) autoSave = true;
        }
     
        System.out.println("프로그램을 종료합니다.");
    }
 
    // 사용자 쓰레드
    public void run(){
        while(true){
            try{
                Thread.sleep(3 * 1000); // 3초마다
            }catch(InterruptedException e){ }
 
            // autoSave의 값이 ture이면 autoSave()를 호출합니다.
            if(autoSave){
                autoSave();
            }
        }
    }
 
    public void autoSave(){
        System.out.println("작업파일이 자동저장되었습니다.");
    }
}
 
/* 실행결과
   1
   2
   3
   4
   5
   6
   작업파일이 자동저장되었습니다.
   7
   8
   작업파일이 자동저장되었습니다.
   9
   10
   11
   작업파일이 자동저장되었습니다.
   12
   13
   14
   작업파일이 자동저장되었습니다.
   15
   16
   17
   18
   작업파일이 자동저장되었습니다.
   19
   20
   프로그램을 종료합니다.
*/
cs




1
2
3
4
5
6
boolean isDaemon() 
: 쓰레드가 데몬 쓰레드인지 확인합니다. 데몬 쓰레드면 ture를 반환합니다.
 
void setDaemon(boolean on)
: 쓰레드를 데몬 쓰레드로 또는 사용자 쓰레드로 변경합니다.
  ( 매개변수 on의 값 ture로 지정하면 데몬 쓰레드가 됩니다. )
cs


728x90
반응형

'JAVA > JAVA 스레드' 카테고리의 다른 글

[java] wait()와 notify()  (0) 2017.11.02
[java] 쓰레드의 동기화  (0) 2017.11.02
[java] 쓰레드의 실행제어  (0) 2017.11.02
[java] 쓰레드 그룹  (0) 2017.11.01
[java] 쓰레드의 우선순위  (0) 2017.11.01
[java] 싱글쓰레드와 멀티쓰레드  (0) 2017.11.01
[java] start()와 run()  (0) 2017.11.01
[java] 쓰레드 구현 및 실행  (0) 2017.11.01
블로그 이미지

nineDeveloper

안녕하세요 현직 개발자 입니다 ~ 빠르게 변화하는 세상에 뒤쳐지지 않도록 우리모두 열심히 공부합시다 ~! 개발공부는 넘나 재미있는 것~!

,