[Java] 데몬 스레드

Devlog·2024년 4월 1일

Java

목록 보기
36/41

✔️ 데몬 스레드

: 주 스레드의 작업을 돕는 보조적인 역할을 수행하는 스레드
: 주 스레드가 종료되면 데몬 스레드는 강제적으로 자동 종료되는데,
그 이유는 주 스레드의 보조 역할을 수행하므로
주 스레드가 종료되면 데몬 스레드의 존재 의미가 사라지기 때문

이 점을 제외하면 데몬 스레드는 일반 스레드와 큰 차이가 없음

ex)
워드프로세서의 자동 저장, 
미디어 플레이어의 동영상 및 음악 재생,
쓰레기 수집기 등이 있는데
이 기능들은 주 스레드가 종료되면 같이 종료됨

: 스레드를 데몬으로 만들기 위해서는
주 스레드가 데몬이 될 스레드의 setDaemon(true)를 호출하면 됨

public static void main(String[] args) {
	AutoSaveThread thread = new AutoSaveThread();
	thread.setDaemon(true);
	thread.start();
	...
}

주의할 점
start() 메소드가 호출되고 나서
setDaemon(true)를 호출하면
IllegalThreadStateException이 발생하기 때문에

start() 메소드 호출 전에
setDaemon(true)를 호출해야 한다는 것

: 현재 실행 중인 스레드가 데몬 스레드인지 아닌지 구별하려면
isDaemon() 메소드의 리턴값을 조사해보면 됨
데몬 스레드일 경우 true를 리턴함

1초 주기로 save() 메소드를 자동 호출하도록
AutoSaveThread를 작성하고,  메인 스레드가 3초 후 종료되면
AutoSaveThread도 같이 종료되도록
AutoSaveThread를 데몬 스레드로 만들기

👩‍💻 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를 데몬 스레드로 만듦
		autoSaveThread.setDaemon(true);
		autoSaveThread.start();
		
		try {
			Thread.sleep(3000);
		} catch (InterruptedException e) {
			
		}
		
		System.out.println("메인 스레드 종료");
	}
}

0개의 댓글