데몬 쓰레드
는 일반 쓰레드의 작업을 돕는 보조 쓰레드입니다. 그렇기 때문에 데몬 쓰레드는 일반 쓰레드가 종료돠면 알아서 종료가 됩니다. 이러한 특징을 제외하고는 일반 쓰레드와의 차이점은 없습니다. 사용법도 일반 쓰레드와 동일하게 start()
를 통해 호출하는데요. 호출 하기 전에 setDaemon(true)
를 통해서 쓰레드를 데몬 쓰레드로 바꿔주고 실행을 해야한다는 점입니다. (하지 않으면 일반 쓰레드로 실행됨)
일반적으로 데몬 쓰레드느 반복문과 조건문을 사용해서 처음 실행한 뒤 대기하다가 특정 조건에 부합하면 실행하는 형으로 코드를 작성합니다.
다음 코드는 데몬 쓰레드를 만들고 데몬 쓰레드의 동작을 보여주는 예제 코드입니다.
public class MyDaemon implements Runnable {
public static boolean flag = false;
@Override
public void run() {
while(true) {
try {
Thread.sleep(3000);
}
catch (InterruptedException e) {
System.err.println(e);
}
if (flag) { //flag가 true가되면 3초마다 메세지를 출력
daemonMassage();
}
}
}
public static void daemonMassage() {
System.out.println("데몬 쓰레드 작업");
}
}
public class Main {
public static void main(String[] args) {
Thread thread = new Thread(new MyDaemon());
thread.setDaemon(true); //데몬 쓰레드로 설정
thread.start(); //쓰레드 실행
for (int i = 0; i < 30; i++) {
try {
Thread.sleep(1000);
}
catch (InterruptedException e) {
System.err.println(e);
}
System.out.println(i);
if (i == 3) { //i가 3에 도달하면 flag를 true로 만들어서 데몬 쓰레드가 동작하도록 설정
MyDaemon.flag = true;
}
}
}
}
처음에는 데몬 쓰레드가 실행되지 않고 있다가 3에 도달하면 데몬 쓰레드가 작업을 시작합니다. 그 뒤에는 설정한대로 3초마다 데몬 쓰레드가 작업을 실행하는 것을 볼 수 있습니다.