남극
JAVA - Daemon Thread 본문
안녕하세요.
오늘은 데몬 스레드에 대해서 포스팅하려고 합니다.
Daemon Thread
Daemon Thread의 정의
데몬 스레드를 정의하자면 일반 스레드와는 달리 일반 스레드를 돕는 보조적인 역할을 합니다.
Daemon Thread의 역할
일반 스레드가 종료되면 데몬 스레드는 강제적을 종료가 됩니다. 보조적인 역할을 하는 스레드이기에 보조적인 역할을 해줄 스레드가 없으면 존재의 의미가 없기 때문입니다.
Daemon Thread의 예시
예로는 간단하게 자동 저장이 있습니다. 일정한 구간마다 자동 저장을 하게 하는 것과 같은 것입니다. 워드로 문서를 작성하다 보면 상단 바에서 자동 저장 중이라는 글을 보실 수 있습니다.
Daemon Thread 사용법
데몬 스레드의 두 가지 메서드를 봅시다.
boolean isDaemon() // 스레드가 데몬 스레드인지 확인하는 메서드
void setDaemon(boolean on) // 스레드를 데몬 스레드 또는 사용자 스레드로 변경하는 메서드
이렇게 두 가지가 있습니다. 우리는 밑에 있는 메서드를 사용하여 살펴볼 것입니다
Thread thr = new Thread(new DaemonThreadTest());
thr.setDaemon(true);
이렇게 하면 데몬 스레드를 설정해줄 수 있습니다.
Daemon Thread 예제
일단 데몬 스레드는 말 그대로 보조적인 역할을 하기 때문에 보통 무한 루프와 조건문을 이용해서 사용합니다. 프로그램을 실행시킨 후 특정 조건이 만족되면 작업을 수행하고 다시 대기하는 형식으로 만듭니다.
public class DaemonThreadTest implements Runnable {
static boolean autoSave = false;
public static void main(String[] args) {
Thread thr = new Thread(new DaemonThreadTest());
thr.setDaemon(true);
thr.start();
for (int i = 1; i <= 10; i++) {
try {
Thread.sleep(500);
} catch (Exception e) { }
System.out.println(i);
if (i == 5) {
autoSave = true;
}
}
System.out.println("프로그램을 종료합니다.");
}
@Override
public void run() {
while (true) {
try {
Thread.sleep(1500);
} catch (Exception e) {}
if (autoSave) {
autoSaveMethod();
}
}
}
public void autoSaveMethod() {
System.out.println("작업파일이 자동 저장되었습니다.");
}
}
예제를 해석하자면 이렇습니다. 0.5초마다 1씩 출력합니다. 그러다가 i가 5가 되는 순간에 autoSave 변수에 true 값이 들어가게 되고 밑에서 돌고 있던 while 문에서 if 문 조건이 만족하기 때문에 autoSaveMethod를 호출합니다. 그러면 문구가 뜹니다. 이런 식으로 조건에 충족하면 원하는 결과를 얻게 할 수 있습니다. 결과를 보시죠.
1
2
3
4
5
작업파일이 자동 저장되었습니다.
6
7
8
작업파일이 자동 저장되었습니다.
9
10
프로그램을 종료합니다.
이렇게 출력을 하고 프로그램이 종료됩니다. 여기서 재미있는 건 위에 소스코드가 데몬 스레드가 아니라면 어떻게 될까요?
1
2
3
4
5
작업파일이 자동 저장되었습니다.
6
7
8
작업파일이 자동 저장되었습니다.
9
10
프로그램을 종료합니다.
작업파일이 자동 저장되었습니다.
작업파일이 자동 저장되었습니다.
작업파일이 자동 저장되었습니다.
작업파일이 자동 저장되었습니다.
작업파일이 자동 저장되었습니다.
작업파일이 자동 저장되었습니다.
....
이렇게 무한 반복을 하게 됩니다. 왜냐면 while이기 때문이죠. 따로 terminate를 안 해주면 계속 돌아가도록 만들어져 있습니다.
데몬 스레드 주의할 점
start를 호출하기 전에 실행되어야 합니다. 그렇지 않으면 에러가 발생하게 됩니다.
정리
간략하게 정리하자면 데몬 스레드는 스레드의 보조적인 역할을 하며 사용을 할 때는 특정 조건에 맞추어 사용이 되고 사용되는 예시로는 자동 저장 기능 등이 있습니다.