-
[Thread] Daemon Threadjava/Thread 2021. 5. 27. 22:03
데몬 스레드는 일반 스레드의 작업을 돕는 보조적인 역할을 수행하는 스레드
일반 스레드가 모두 종료되면 데몬 스레드는 자동 종료된다. 일반 스레드의 보조역할을 수행하므로 일반 스레드가 없으면 존재의미가 없기 때문이다.
데몬 스레드- 가비지 컬렉터, 워드프로세서의 자동저장, 화면자동갱신 등이 있다.
데몬 스레드는 일반 스레드의 작성방법과 실행방법이 같으며 스레드를 생성한 후 실행전에 setDaemon(true)를 호출하기만 하면 된다.
데몬 스레드가 생성한 스레드는 자동적으로 데몬 스레드가 된다.
스레드가 데몬 스레드인지 일반 스레드인지 확인하는 메서드 스레드참조변수.isDaemon() -> boolean리턴
데몬 스레드는 무한루프와 조건문을 이용하여 실행 후 대기하고 있다가 특정 조건이 만족되면 작업을 수행하고 다시 대기하도록 작성한다.
public class DaemonThreadTest implements Runnable { static boolean autoSave = false; public static void main(String[] args) { Thread t = new Thread(new DaemonThreadTest()); 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) {} if(autoSave) { //// autoSave의 값이 true이면 autoSave()를 호출한다. autoSave(); } } } public void autoSave() { System.out.println("작업파일이 자동저장되었습니다."); } }
결과
1
2
3
4
5
작업파일이 자동저장되었습니다.
6
7
8
작업파일이 자동저장되었습니다.
9
10
프로그램을 종료합니다.
isDaemon(true)를 설정하지 않으면 10초가 지나도 메인스레드는 종료되었지만(프로그램을 종료합니다)
생성한 스레드 t는 영원히 돌게 된다.
1
2
3
4
5
작업파일이 자동저장되었습니다.
6
7
8
작업파일이 자동저장되었습니다.
9
10
프로그램을 종료합니다.
작업파일이 자동저장되었습니다. //종료되지 않은 우리가 돌리고 있는 스레드
작업파일이 자동저장되었습니다.
작업파일이 자동저장되었습니다.
작업파일이 자동저장되었습니다.
작업파일이 자동저장되었습니다.
setDaemon()메서드는 start()를 호출하기 전에 실행되어야 한다. 그렇지 않으면 IllegalThreadStateException이 발생한다.
'java > Thread' 카테고리의 다른 글
[Thread] InterruptedException과 인터럽트 상태 (0) 2022.06.12 Thread(5) synchronized를 이용한 스레드 동기화 (0) 2021.06.08 [Thread] Thread, ThreadGroup (0) 2021.05.27