사용자 쓰레드
- 보이는 곳(foregorund) 에서 실행되는 높은 우선순위를 가진 쓰레드를 말함
- 프로그램 기능을 담당하며 대표적인 사용자 쓰레드로는 메인 쓰레드가 있다.
- 앞서 만든 쓰레드들이 모두 사용자 쓰레드이다.
- JVM 은 사용자 쓰레드의 작업이 끝나면 데몬 쓰레드도 자동으로 종료시킨다.
데몬 쓰레드
- 보이지 않는곳(background) 에서 실행되는 낮은 우선순위를 가진 쓰레드
- 다른 쓰레드에 비해 리소스를 적게 할당받아 다른 쓰레드에 비해 속도가 느림
- 메인쓰레드와 병렬로 수행되며, 메인쓰레드가 종료되면 데몬쓰레드도 종료됨
- 보조적인 역할을 담당하며 대표적인 데몬 쓰레드로는 메모리 영역을 정리해주는 가비지 컬렉터(GC)가 예시
setDeamon(true) : Thread를 데몬쓰레드로 만들어주는 메서드
- 데몬 쓰레드 설정 방법 예시
- ex. demon 쓰레드는 우선순위가 낮고 다른 쓰레드가 모두 종료되면 강제 종료 당하기 때문에
main() 쓰레드의 task가 100번이 먼저 찍히면 종료되어 1000000번 수행이 되지 않고 종료된다.
public class Main {
public static void main(String[] args) {
// 람다식을 이용해서 demon이라는 Thread 생성
Runnable demon = () -> {
for (int i = 0; i < 1000000; i++) {
System.out.println("demon");
}
};
Thread thread = new Thread(demon); // Thread 생성
thread.setDaemon(true); // true로 설정시 Thread를 데몬스레드로 설정
thread.start(); // Thread 실행
// main 쓰레드
for (int i = 0; i < 100; i++) {
System.out.println("task");
}
}
}