데몬 스레드(daemon thread)
- 일반 스레드의 작업을 돕는 보조적인 역할을 수행한다.
- 일반 스레드가 모두 종료되면 자동적으로 종료된다.
- 가비지 컬렉터, 자동저장, 화면자동갱신 등에 사용된다.
- 무한루프와 조건문을 이용해서 실행 후 대기하다가 특정 조건이 만족되면 작업을 수행하고 다시 대기하도록 작성한다.
✔ boolean isDaemon()
- 스레드가 데몬 스레드인지 확인한다. 데몬 스레드이면 true를 반환한다.
✔ void setDaemon(boolean on)
- 스레드를 데몬 스레드로 또는 사용자 스레드로 변경한다.
- 매개변수 on의 값을 true로 지정하면 데몬 스레드가 된다.
- setDaemon(boolean on)은 반드시 start()를 호출하기 전에 실행되어야 한다.
그렇지 않으면 IllegalThreadStateException이 발생한다.
🌳 데몬 스레드를 사용하지 않았을 때
public class ThreadTest06 {
public static void main(String[] args) {
AutoSaveThread autoSave = new AutoSaveThread();
autoSave.start();
try {
for (int i = 1; i <= 20; i++) {
System.out.println(i);
Thread.sleep(1000);
}
} catch (InterruptedException e) {
}
System.out.println("main 스레드 종료");
}
}
// 자동 저장하는 스레드 (3초에 한 번씩 자동 저장하는 스레드)
class AutoSaveThread extends Thread {
// 작업 내용을 저장하는 메소드
public void save() {
System.out.println("작업 내용을 저장합니다.");
}
@Override
public void run() {
while (true) {
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
}
save();
}
}
}
//실행 결과
//1
//2
//3
//작업 내용을 저장합니다.
//4
//5
//6
//작업 내용을 저장합니다.
//7
//8
//9
//작업 내용을 저장합니다.
//10
//11
//12
//작업 내용을 저장합니다.
//13
//14
//15
//작업 내용을 저장합니다.
//16
//17
//18
//작업 내용을 저장합니다.
//19
//20
//main 스레드 종료
//작업 내용을 저장합니다.
//작업 내용을 저장합니다.
//작업 내용을 저장합니다.
//작업 내용을 저장합니다.
//작업 내용을 저장합니다.
//작업 내용을 저장합니다.
//작업 내용을 저장합니다.
//작업 내용을 저장합니다.
//작업 내용을 저장합니다.
//작업 내용을 저장합니다.
//작업 내용을 저장합니다.
//작업 내용을 저장합니다.
//작업 내용을 저장합니다.
//작업 내용을 저장합니다.
- 메인 메소드가 종료되었으나 자동 저장 스레드는 종료되지 않았기 때문에 자동 저장 스레드가 무한 반복된다.
🌳 데몬 스레드를 사용하였을 때
public class ThreadTest06 {
public static void main(String[] args) {
AutoSaveThread autoSave = new AutoSaveThread();
// 데몬 스레드로 설정하기
// 반드시 start() 메소드 호출 전에 설정한다.
autoSave.setDaemon(true);
autoSave.start();
try {
for (int i = 1; i <= 20; i++) {
System.out.println(i);
Thread.sleep(1000);
}
} catch (InterruptedException e) {
}
System.out.println("main 스레드 종료");
}
}
//실행결과
//1
//2
//3
//작업 내용을 저장합니다.
//4
//5
//6
//작업 내용을 저장합니다.
//7
//8
//9
//작업 내용을 저장합니다.
//10
//11
//12
//작업 내용을 저장합니다.
//13
//14
//15
//작업 내용을 저장합니다.
//16
//17
//18
//작업 내용을 저장합니다.
//19
//20
//main 스레드 종료
- 자동 저장 스레드를 데몬 스레드로 설정하였기 때문에 일반 스레드가 모두 종료되면 자동적으로 종료된다.
'JAVA' 카테고리의 다른 글
[JAVA] 스레드의 동기화 - 1 (0) | 2021.08.03 |
---|---|
[JAVA] 멀티 스레드 - 2 (0) | 2021.07.30 |
[JAVA] 하나의 스레드와 여러 개의 스레드가 수행되는 시간 비교하기 (0) | 2021.07.30 |
[JAVA] 멀티 스레드(multi Thread) - 1 (0) | 2021.07.29 |
[JAVA] enum(열거형) (0) | 2021.07.29 |