Java

Demon Thread

RubyRabbit 2022. 9. 4. 17:17

Demon Thread

  • 프로세스의 모든 일반 쓰레드가 종료될 때 남은 작업에 상관없이 같이 종료되는 쓰레드
  • 가비지 컬렉터, 자동 저장 등 프로그램 종료 시점에 맞춰 같이 종료되어야 하는 작업에 사용됨

 

public static void main(String[] args) {
    Thread commonThread = new Thread(() -> {
        String threadName = Thread.currentThread().getName();
        IntStream.range(0, 3).forEach(idx -> execute(threadName));
        System.out.println(threadName + " 종료");
    });
    commonThread.setName("commonThread");

    Thread demonThread = new Thread(() -> {
        String threadName = Thread.currentThread().getName();
        IntStream.range(0, 5).forEach(idx -> execute(threadName));
        System.out.println(threadName + " 종료");
    });
    demonThread.setDaemon(true);
    demonThread.setName("demonThread");

    try {
        commonThread.start();       // 일반 쓰레드 실행

        Thread.sleep(2000);     	// 1초 뒤 데몬 쓰레드 실행
        demonThread.start();
    } catch (InterruptedException e) {
        throw new RuntimeException(e);
    }
    System.out.println("mainThread 종료");
}


public static void execute(String threadName) {
    System.out.println(threadName + " 실행");
    try {
        Thread.sleep(1000);
    } catch (InterruptedException e) {
        throw new RuntimeException(e);
    }
}