728x90
데몬 스레드 VS 사용자 스레드
사용자 스레드(non-daemon 스레드)
- 프로그램의 주요 작업을 수행한다.
- 작업이 완료될 때까지 실행된다.
- 모든 user 스레드가 종료되면 JVM도 종료된다.
데몬 스레드
- 백그라운드에서 보조적인 작업을 수행한다.
- 모든 user 스레드가 종료되면 데몬 스레드는 자동으로 종료된다.
JVM은 데몬 스레드의 실행 완료를 기다리지 않고 종료된다. 데몬 스레드가 아닌 모든 스레드가 종료되면, 자바 프로그램도 종료된다.

- setDaemon(true): 데몬 스레드로 설정한다.
- 데몬 스레드 여부는 start() 실행 전에 결정해야 한다. 이후에는 변경되지 않는다.
- 기본 값은 false이다.(user Thread가 기본)
참고: run() 메서드 안에서 Thread.sleep()를 호출할 때 체크 예외인 InterruptedException을 밖으로 던질 수 없고, 반드시 잡아야 한다. run() 메서드는un() 체크 예외를 밖으로 던질 수 없는데, 이 부분은 뒤에서 설명한다
실행 결과 비교
실행 결과 - setDaemon(true)

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

- setDaemon(false) 설정이다.
- thread-0은 user 스레드로 설정된다.
- main 스레드가 종료되어도, user 스레드인 Thread-0가 종료될 때까지, 자바 프로그램을 종료하지 않는다.
- 따라서 "Thread-0: end"가 출력된다.
- user 스레드인 main 스레드와 Thread-0 스레드가 모두 종료되면서, 자바 프로그램도 종료된다.
728x90
'멀티스레드와 동시성' 카테고리의 다른 글
| Ch02. 스레드 생성과 실행 - 로거 만들기 (0) | 2024.08.01 |
|---|---|
| Ch02. 스레드 생성과 실행 - 스레드 생성(Runnable) (0) | 2024.08.01 |
| Ch02. 스레드 생성과 실행 - 스레드 시작 (0) | 2024.07.23 |
| Ch01. 프로세스와 스레드 소개 - 스레드와 스케줄링 (0) | 2024.07.22 |
| Ch01. 프로세스와 스레드 소개 - 프로세스와 스레드 (0) | 2024.07.17 |