본문 바로가기

JAVA/#혼공단3기

[혼공자] 4주차 - Daemon Thread 손 코딩 및 실행 결과

이번 주 미션 550쪽 [직접 해보는 손 코딩] 코딩 과정 및 실행 결과를 인증샷으로 남긴다.

과제 내용은 12-2. 스레드 제어 중 데몬 스레드에 대한 예제이다.

여기서 데몬(daemon) 스레드란 주 스레드의 작업을 돕는 보조적인 역활을 수행하는 스레드로 주 스레드가 종료되면 데몬 스레드는 강제적으로 자동 종료된다.

예제를 소개하면, 1초 주기로 데몬 스레드에서 save() 메서드를 자동 호출 하고, 메인 스레드가 3초 후 종료되면 데몬 스레드도 같이 종료되는 것을 확인할 수 있다.

 

1초 주기로 save() 메서드를 호출하는 데몬 스레드

public class AutoSaveThread extends Thread {
	public void save () {
    	System.out.println("작업 내용을 저장함");
    }
    
    @Override
    public void run () {
    	while (true) {
        	try {
            	Thread.sleep(1000);
            } catch (InterruptedException e) {
            	break;
            }
            
            save();
        }
    }
}

메인 스레드가 실행하는 코드

public class DaemonExample {
	public static void main (String[] args) {
    	AutoSaveThread autoSaveThread = new AutoSaveThread();
        autoSaveThread.setDaemon(true);	// AutoSaveThread를 데몬 스레드로 만듦
        autoSaveThread.start();
        
        try {
        	Thread.sleep(3000);
        } catch (InterruptedException e) {}
        
        System.out.println("메인 스레드 종료");
    }
}

데몬 스레드를 만들기 위해서는 주 스레드가 데몬이 될 스레드의 setDaemon(true)를 호출 해주면 된다. 주의할 점은 start() 메서드가 호출되고 나서 setDaemon(true)를 호출하면 IllegalThreadStateException이 발생하기 때문에 start() 메서드 호출 전에  setDaemon(true)를 호출해야 한다.

 

실행 결과:

메인 스레드가 종료되면서 데몬 스레드가 종료되는 것을 확인 할 수 있다.