멀티스레드와 동시성

Ch02. 스레드 생성과 실행 - 데몬 스레드

webmaster 2024. 8. 1. 13:12
728x90

데몬 스레드 VS 사용자 스레드

사용자 스레드(non-daemon 스레드)

  • 프로그램의 주요 작업을 수행한다.
  • 작업이 완료될 때까지 실행된다.
  • 모든 user 스레드가 종료되면 JVM도 종료된다.

데몬 스레드

  • 백그라운드에서 보조적인 작업을 수행한다.
  • 모든 user 스레드가 종료되면 데몬 스레드는 자동으로 종료된다.

JVM은 데몬 스레드의 실행 완료를 기다리지 않고 종료된다. 데몬 스레드가 아닌 모든 스레드가 종료되면, 자바 프로그램도 종료된다.

데몬 스레드 - 1
  • setDaemon(true): 데몬 스레드로 설정한다.
  • 데몬 스레드 여부는 start() 실행 전에 결정해야 한다. 이후에는 변경되지 않는다.
  • 기본 값은 false이다.(user Thread가 기본)

참고: run() 메서드 안에서 Thread.sleep()를 호출할 때 체크 예외인 InterruptedException을 밖으로 던질 수 없고, 반드시 잡아야 한다. run() 메서드는un() 체크 예외를 밖으로 던질 수 없는데, 이 부분은 뒤에서 설명한다

 

실행 결과 비교

실행 결과 - setDaemon(true)

setDaemon(true)

  • setDaemon(true) 설정이다.
  • Thread-0은 데몬 스레드로 설정된다.
  • 유일한 user 스레드인 main 스레드가 종료되면서 자바 프로그램도 종료된다.
  • 따라서 "run() end"가 출력되기 전에 프로그램이 종료된다.

실행 결과 - setDaemon(false)

setDaemon(false)

  • setDaemon(false) 설정이다.
  • thread-0은 user 스레드로 설정된다.
  • main 스레드가 종료되어도, user 스레드인 Thread-0가 종료될 때까지, 자바 프로그램을 종료하지 않는다.
    • 따라서 "Thread-0: end"가 출력된다.
  • user 스레드인 main 스레드와 Thread-0 스레드가 모두 종료되면서, 자바 프로그램도 종료된다.

 

728x90