데몬 쓰레드
데몬 쓰레드는 다른 일반 쓰레드의 작업을 돕는 보조적인 역할을 수행하는 쓰레드이다.
가비지 컬렉터, 워드프로세서의 자동저장, 화면자동갱신 등이 이에 속함
데몬 쓰레드는 무한루프와 조건문을 이용해서 실행 후 대기하고 있다가 특정 조건이 만족되면 작업을 수행하고 다시 대기하도록 작성한다.
데몬 쓰레드 설정방법
- 일반 쓰레드와 작성방법과 실행방법이 같음
- 쓰레드 생성 후 실행전에 setDaemon(true)를 호출해야함.
boolean isDaemon() : 쓰레드가 데몬쓰레드인지 확인하여 boolean값 반환.
void setDaemon(boolean on) : 쓰레드를 데몬 쓰레드로 또는 사용자 쓰레드로 변경.
매개변수 on의 값을 true로 지정하면 데몬 쓰레드가 된다.
class ThreadEx10 implements Runnable {
static boolean autoSave = false;
public static void main(String[] args) {
Thread t = new Thread(new ThreadEx10());
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("프로그램을 종료합니다.");
}
public void run() {
while(true) {
try {
Thread.sleep(3 * 1000); // 3초마다
} catch(InterruptedException e) {}
// autoSave의 값이 true이면 autoSave()를 호출한다.
if(autoSave) {
autoSave();
}
}
}
public void autoSave() {
System.out.println("작업파일이 자동저장되었습니다.");
}
}
// 결과
1
2
3
4
5
작업파일이 자동저장되었습니다.
6
7
8
작업파일이 자동저장되었습니다.
9
10
프로그램을 종료합니다.
3초마다 변수 autoSave의 값을 확인해서 그 값이 true이면, autoSave()를 호출하는 일을 무한히 반복하는 데몬쓰레드를 작성하였다.
만약 데몬쓰레드가 아니였다면, 프로그램을 강제종료하지 않는 한 영원히 종료되지 않는다.
데몬쓰레드이기에, 일반쓰레드가 모두 종료되면 데몬 쓰레드는 강제적으로 종료된다.
참조
'Java의 정석' 책
'Language > Java' 카테고리의 다른 글
[Java] 쓰레드 6 - 쓰레드 동기화(synchronized , Lock, Condition) (0) | 2022.03.14 |
---|---|
[Java] 쓰레드 5 - 쓰레드의 실행제어(sleep, interrupt, join, yield) (0) | 2022.03.14 |
[Java] 쓰레드 3 - 쓰레드 우선순위와 쓰레드 그룹 (0) | 2022.03.14 |
[Java] 쓰레드 2 - 싱글쓰레드와 멀티쓰레드 (0) | 2022.03.13 |
[Java] 쓰레드 1 - 구현 및 실행(start, run) (0) | 2022.03.13 |
댓글