13-18~21 데몬 쓰레드(Daemon Thread), 쓰레드의 상태

oyeon·2020년 12월 31일
0

Java 개념

목록 보기
54/70

데몬 쓰레드(Daemon Thread)

  • 일반 쓰레드(non-daemon thread)의 작업을 돕는 보조적인 역할을 수행
  • 일반 쓰레드가 모두 종료되면 자동적으로 종료된다.
  • 가비지 컬렉터, 자동저장, 화면 자동갱신 등에 사용된다.
  • 무한루프와 조건문을 이용해서 실행 후 대기하다가 특정조건이 만족되면 작업을 수행하고 다시 대기하도록 작성한다.
  • 예제
public void run(){
    while(true){	// 일반 쓰레드가 언제 끝날지 모르므로 무한루프
    	try{
            Thread.sleep(3 * 1000);	// 3초 마다
        } catch(InterruptedException e) {}
        
        // autoSave의 값이 true이면 autoSave()를 호출한다.
        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());	// Thread(Runnable r)
		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);	// 3초마다
			} catch(InterruptedException e) {}
			
			// autoSave의 값이 true이면 autoSave()를 호출한다.
			if(autoSave) autoSave();
		}		
	}
	public void autoSave() {
		System.out.println("작업파일이 자동저장 되었습니다.");
	}
}
  • 일반 쓰레드가 하나도 없을 때 데몬 쓰레드는 자동 종료

쓰레드의 상태

쓰레드의 실행제어

  • 쓰레드의 실행을 제어할 수 있는 메서드가 제공된다.
  • 아래 메서드들을 활용해서 보다 효율적인 프로그램을 작성할 수 있다.
  • static : sleep, yield - 쓰레드 자기 자신에게만 호출 가능
profile
Enjoy to study

0개의 댓글