티스토리 뷰

주의 사항!

  • 이 글은 제가 직접 공부하는 중에 작성되고 있습니다.
  • 따라서 제가 이해하는 그대로의 내용이 포함됩니다.
  • 따라서 이 글은 사실과는 다른 내용이 포함될 수 있습니다.


데몬(daemon) 스레드는 주 스레드의 작업을 돕는 보조적인 역할을 수행하는 스레드입니다. 주 스레드가 종료되면 데몬 스레드는 강제적으로 자동 종료됩니다. 이 점을 제외하면 데몬 스레드는 일반 스레드와 큰 차이가 없습니다. 데몬 스레드의 적용 예는 워드프로세서의 자동 저장, 미디어 플레이어의 동영상 및 음악 재생, 가비지 컬렉터 등이 있는데, 이 기능들은 주 스레드(워드프로세서, 미디어 플레이어, JVM)가 종료되면 같이 종료됩니다.

 

스레드를 데몬으로 만들기 위해서는 주 스레드가 데몬이 될 스레드의 setDaemon(true)를 호출해주면 됩니다. 아래의 코드를 보면 메인 스레드가 주 스레드가 되고 AutoSaveThread가 데몬 스레드가 됩니다.

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

이때 주의해야 할 것이 있습니다. start() 메서드가 호출되고 나서 setDaemon(true)를 호출하면 IllegalThreadStateException 예외가 발생하기 때문에 start() 메서드 호출 전에 setDaemon(true)를 호출해야 합니다.

 

현재 실행 중인 스레드가 데몬 스레드인지 아닌지를 구별하는 방법은 isDaemon() 메서드의 리턴 값을 조사해보면 됩니다. 데몬 스레드일 경우 ture를 리턴합니다.

 

다음 예제는 1초 주기로 save() 메서드를 자동 호출하도록 AutoSaveThread를 작성하고, 메인 스레드가 3초 후 종료되면 AutoSaveThread도 같이 종료되도록 AutoSaveThread를 데몬 스레드로 만들었습니다.

//AutoSaveThread.java
package Example;

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();
		}
	}
}
//Main.java
package Example;

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

/*
실행결과

작업 내용을 저장함.
작업 내용을 저장함.
메인 스레드 종료

*/

 

'공부 일지 > JAVA 공부 일지' 카테고리의 다른 글

자바, 스레드풀  (0) 2021.04.28
자바, 스레드 그룹  (2) 2021.04.27
자바, 스레드 상태 제어  (0) 2021.04.26
자바, 스레드 상태  (0) 2021.04.26
자바, 동기화 메서드와 동기화 블록  (0) 2021.04.26
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함