자바에서 스레드는 각자의 작업이 끝날때까지 계속해서 작업을 하게 되어 있습니다.
그런데 곰곰이 생각해보면 필요에 따라서 계속 할 필요가 없는 스레드도 있습니다.
예를들어 구글 Docs에 자동 저장기능이 있습니다. 그 말은 자동 저장 기능이 별도의 쓰레드로 돌고 있다는 말이 됩니다.
그럼 구글 Docs가 끝나면 자동 저장 기능 쓰레드는 사라지는게 당연한게 아닐까요?
그래서 나온것이 데몬 스레드입니다.
데몬(daemon) 스레드
: 주 스레드의 작업을 돕는 보조적인 역할을 수행하는 스레드
: 주 스레드가 종료되면 데몬 스레드는 강제적으로 자동종료
=> 워드 프로세서의 자동저장, 미디어 플레이어의 동영상 및 음악재생,가비지 컬렉터
데몬 스레드 설정 방법
:주 스레드가 데몬이 될 스레드의 setDaemon(true)을 호출
: 반드시 start() 메소드 호출전에 setDaemon(true)을 호출
=> 그렇지 않으면 illegalThreadStateException 발생
예제)
AutoSaveThread.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | package AutoSaveThread; public class AutoSaveThread extends Thread { public void save() { System.out.println("작업 내용을 저장함"); } @Override public void run() { while(true) { try { Thread.sleep(500); } catch (InterruptedException e) { break; } save(); } } } | cs |
DaemonExample.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | package AutoSaveThread; public class DaemonExample { public static void main(String[] args) { AutoSaveThread autoSaveThread = new AutoSaveThread(); autoSaveThread.setDaemon(true); autoSaveThread.start(); try { Thread.sleep(5000); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("메인 스레드 종료"); } } | cs |
만약 7번째줄에 setDaemon을 하지 않으면 AutoSaveThread는 계속해서 작업을 하게 된다.