Daemon Thread vs User Thread
Java에서 스레드는 크게 User Thread(사용자 스레드) 와 Daemon Thread(데몬 스레드) 로 나뉩니다.
1. User Thread (사용자 스레드)
✅ 특징
- 기본적으로 생성되는 스레드는 모두 User Thread
- 메인 스레드(Main Thread)도 사용자 스레드
- 모든 사용자 스레드가 종료될 때까지 JVM은 종료되지 않음
✅ 예제
public class UserThreadExample {
public static void main(String[] args) {
Thread userThread = new Thread(() -> {
for (int i = 0; i < 5; i++) {
System.out.println("User Thread 실행 중...");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
});
userThread.start();
System.out.println("메인 스레드 종료");
}
}
메인 스레드 종료
User Thread 실행 중...
User Thread 실행 중...
User Thread 실행 중...
User Thread 실행 중...
User Thread 실행 중...
메인 스레드가 먼저 종료되더라도 userThread가 끝날 때까지 JVM이 종료되지 않음
2. Daemon Thread (데몬 스레드)
✅ 특징
- 백그라운드에서 실행되는 스레드
- 모든 User Thread가 종료되면 자동으로 종료됨
- 주로 GC(Garbage Collector), 로그 기록, 감시(Watchdog) 등의 역할 수행
- setDaemon(true) 메서드를 호출하여 데몬 스레드로 설정 가능
- setDaemon(true) 는 start() 호출 전에 설정해야 함
✅ 예제
public class DaemonThreadExample {
public static void main(String[] args) {
Thread daemonThread = new Thread(() -> {
while (true) {
System.out.println("Daemon Thread 실행 중...");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
});
daemonThread.setDaemon(true); // 데몬 스레드 설정
daemonThread.start();
System.out.println("메인 스레드 종료");
}
}
메인 스레드 종료
Daemon Thread 실행 중...
👉 메인 스레드가 종료되면 데몬 스레드도 자동으로 종료됨
3. 주의할 점
- 데몬 스레드는 비정상적으로 종료될 수 있음
- User Thread가 종료되면 남은 작업이 있더라도 Daemon Thread는 강제 종료됨
- 따라서 데몬 스레드에서 파일 저장, 중요한 작업 처리 등을 하면 안 됨
'WEB개발 > JAVA' 카테고리의 다른 글
CyclicBarrier, CountDownLatch (0) | 2025.02.21 |
---|---|
제너릭 Generic (0) | 2024.12.18 |
메서드 참조, function, consumer, supplier (0) | 2024.12.18 |
[JAVA] 메모리 스택, 힙 (0) | 2022.10.31 |
[JAVA] Thread-Safe, Concurrent Collection class, Double Checked Locking (0) | 2021.09.23 |