데몬 쓰레드(Daemon Thread)
- 일반 쓰레드(non-daemon thread)의 작업을 돕는 보조적인 역할을 수행
- 일반 쓰레드가 모두 종료되면 자동적으로 종료된다.
- 가비지 컬렉터, 자동저장, 화면 자동갱신 등에 사용된다.
- 무한루프와 조건문을 이용해서 실행 후 대기하다가 특정조건이 만족되면 작업을 수행하고 다시 대기하도록 작성한다.
- 예제
public void run(){
while(true){
try{
Thread.sleep(3 * 1000);
} catch(InterruptedException e) {}
if(autoSave){
autoSave();
}
}
}
boolean isDaemon() - 쓰레드가 데몬 쓰레드인지 확인한다. 데몬 쓰레드이면 true 반환
void setDaemon(boolean on) - 쓰레드를 데몬 쓰레드로 또는 사용자 쓰레드로 변경.
매개변수 on을 true로 지정하면 데몬 쓰레드가 된다.
- ※ setDaemon(boolean on)은 반드시 start() 호출하기 전에 실행되어야 한다. 그렇지 않으면 IllegalThreadStateException이 발생
- 실습
public class practice implements Runnable {
static boolean autoSave = false;
public static void main(String[] args){
Thread t = new Thread(new practice());
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);
} catch(InterruptedException e) {}
if(autoSave) autoSave();
}
}
public void autoSave() {
System.out.println("작업파일이 자동저장 되었습니다.");
}
}
- 일반 쓰레드가 하나도 없을 때 데몬 쓰레드는 자동 종료
쓰레드의 상태
쓰레드의 실행제어
- 쓰레드의 실행을 제어할 수 있는 메서드가 제공된다.
- 아래 메서드들을 활용해서 보다 효율적인 프로그램을 작성할 수 있다.
- static : sleep, yield - 쓰레드 자기 자신에게만 호출 가능