본문 바로가기

Programming/JAVA

멀티 스레드(7) - 데몬 스레드 1

 

 

 

데몬(daemon) 스레드는, 주 스레드의 작업을 돕는 보저 역할을 수행하는 스레드입니다. 사실 이 데몬 스레드 자체의 속성은 일반 스레드와 아주 크게 다르지는 않은데, 주 스레드가 종료되면 강제로 종료된다는 특성을 갖습니다. 말했듯이 주 스레드의 보조 역할을 하는 것이 근본적인 존재 이유이기 때문에, 주 스레드가 종료되면 남아있을 이유가 없는 것이죠.

 

데몬 스레드가 동작하는 실제 예시를 보면, 워드프로세서의 자도 ㅇ저장 / 미디어 플레이어의 동영상(음악) 재생 / 가비지 컬렉터 등이 있습니다. 이들은 주 스레드(워드, 미디어 플레이어, JVM)가 종료되면 같이 종료됩니다. 

 

 

 


 

 

 

스레드를 데몬으로 만들기 위해서는, 주 스레드가 데몬이 될 스레드의 setDaemon(true)를 호출해야 합니다. 아래 예제를 보겠습니다. 

 

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

 

 

위 예제의 AutoSaveThread가 데몬 스레드가 되었습니다. 주의할 점은, 해당 스레드의 start( ) 메서드 호출 전에 setDaemon(true)를 실행해야 한다는 점입니다. start( ) 출력 이후 setDaemon(true)를 호출하면, IllegalThreadStateException이 발생합니다. 

 

참고로 특정 스레드의 daemon 여부는 isDaemon( ) 메서드를 통해 확인이 가능합니다. 데몬일 경우 true를 리턴합니다.

 

 

 


 

 

 

좀 더 자세한 예제를 살펴보겠습니다. 아래의 예제는 1초 주기로 save( ) 메서드가 자동 호출되도록 AutoSaveThread를 작성하고, 메인 스레드가 3초 후 종료되면 AutoSaveThread도 같이 종료될 수 있도록 AutoSaveThread를 데몬 스레드로 만들었습니다.