본문 바로가기
Language/Java

[Java] 쓰레드 4 - 데몬 쓰레드(daemon thread)

by 계범 2022. 3. 14.

데몬 쓰레드

데몬 쓰레드는 다른 일반 쓰레드의 작업을 돕는 보조적인 역할을 수행하는 쓰레드이다.

가비지 컬렉터, 워드프로세서의 자동저장, 화면자동갱신 등이 이에 속함

 

데몬 쓰레드는 무한루프와 조건문을 이용해서 실행 후 대기하고 있다가 특정 조건이 만족되면 작업을 수행하고 다시 대기하도록 작성한다.

 

데몬 쓰레드 설정방법

  • 일반 쓰레드와 작성방법과 실행방법이 같음
  • 쓰레드 생성 후 실행전에 setDaemon(true)를 호출해야함.
boolean isDaemon() : 쓰레드가 데몬쓰레드인지 확인하여 boolean값 반환.
void setDaemon(boolean on) : 쓰레드를 데몬 쓰레드로 또는 사용자 쓰레드로 변경.
                                        매개변수 on의 값을 true로 지정하면 데몬 쓰레드가 된다.

 

 class ThreadEx10 implements Runnable  {
	static boolean autoSave = false;

	public static void main(String[] args) {
		Thread t = new Thread(new ThreadEx10());
		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("작업파일이 자동저장되었습니다.");
	}
}
// 결과
1
2
3
4
5
작업파일이 자동저장되었습니다.
6
7
8
작업파일이 자동저장되었습니다.
9
10
프로그램을 종료합니다.

3초마다 변수 autoSave의 값을 확인해서 그 값이 true이면, autoSave()를 호출하는 일을 무한히 반복하는 데몬쓰레드를 작성하였다.

 

만약 데몬쓰레드가 아니였다면, 프로그램을 강제종료하지 않는 한 영원히 종료되지 않는다.

데몬쓰레드이기에, 일반쓰레드가 모두 종료되면 데몬 쓰레드는 강제적으로 종료된다.

 

참조

'Java의 정석' 책

댓글