남궁성님의 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()가 계속 호출되어 프로그램이 종료되지 않았을 것이다.
'Programming > Java' 카테고리의 다른 글
[Java] 쓰레드(Thread) - 6(쓰레드 동기화) (0) | 2023.12.10 |
---|---|
[Java] 쓰레드(Thread) - 5(쓰레드 상태와 실행제어) (0) | 2023.12.10 |
[Java] 쓰레드(Thread) - 3(싱글쓰레드 vs. 멀티쓰레드) (0) | 2023.12.10 |
[Java] 쓰레드(Thread) - 2(쓰레드와 Stack Area) (0) | 2023.12.10 |
[Java] 네트워크 프로그래밍 - 2(Socket, TCP/UDP) (0) | 2023.12.10 |