[JAVA] Thread - 2(데몬 스레드)

권재현·2024년 10월 17일

JAVA

목록 보기
4/11

정의

  • 데몬 스레드란 보이지 않는 곳 (background)에서 실행되는 낮은 우선 순위를 가진 스레드를 말한다.
  • 멀티태스킹 운영 체제에서 데몬(Daemon)은 사용자가 직접적으로 제어하지 않고, 백그라운드를 돌면서 여러 작업을 하는 프로그램을 의미한다.
  • 시스템이 시작될때 데몬도 시작되는 경우가 많으며 자바에선 대표적으로 GC(가비지 컬렉터)가 있다.

데몬 스레드 활용 방법

  • 스레드를 데몬으로 만들기 위해선 주 스레드가 데몬이 될 스레드의 메소드 setDaemon(true)를 호출해주면 된다.
  • 단, setDaemon() 메소드는 스레드가 실행되기전에만 호출될 수 있으며 Thread.start()메소드 호출 이후 호출된다면 llegalThreadStateException 예외가 발생한다.
  • isDaemon() 메소드를 이용하여 해당 스레드가 데몬 스레드인지 주 스레드인지 판단할 수 있다.
  • 주기적인 로그 기록, 자동 저장 및 백업, 네트워크 리스너 등을 구현할때 활용되기도 한다.
public class Main {
    public static void main(String[] args) {
        Runnable demon = () -> {
            for (int i = 0; i < 1000000; i++) {
                System.out.println("demon");
            }
        };

        Thread thread = new Thread(demon);
        thread.setDaemon(true); // true로 설정시 데몬스레드로 실행됨

        thread.start();

        for (int i = 0; i < 100; i++) {
            if(thread.isDaemon()) { 
                System.out.println("Daemontask");
            }
                System.out.println("Nomaltask");
            }// daemon 스레드는 우선순위가 낮으므로 주 스레드인 thread가 100번 돌고 종료되면 데몬 스레드는 만번 이상 돌지 않아도 강제종료된다.
        }
    }
  • 위 처럼 JVM은 데몬 스레드의 종료를 기다리지 않기 때문에 JVM이 종료된다면 데몬 스레드를 강제로 kill 하고 셧다운 작업을 진행한다.

마무리

  • 주기적인 로그 기록같은 기능에 필수적이고 유용한 개념이지만 사용자가 직접 제어하지 않으며 주 스레드가 종료되면 강제 종료되는 특성 때문에 안정성과 동기화 문제를 조심해야할 것 같다. 그럼에도 꽤 강력한 기능이기에 프로젝트를 하게 된다면 적극적으로 활용할 필요가 있을듯 하다.

출처

https://hbase.tistory.com/285#google_vignette
https://widevery.tistory.com/32
https://ko.wikipedia.org/wiki/%EB%8D%B0%EB%AA%AC_(%EC%BB%B4%ED%93%A8%ED%8C%85)
https://velog.io/@dev_lee/Java-%EB%B9%84%EB%8F%99%EA%B8%B0-%EC%B2%98%EB%A6%AC-%EB%8D%B0%EB%AA%AC-%EC%8A%A4%EB%A0%88%EB%93%9CDaemon-Thread

profile
여전히 헤매이고 있습니다.

0개의 댓글