IT 개발/Java
[Java] 자바 - 데몬스레드 vs 사용자스레드 (daemon thread vs user thread)
KADOSHOLY
2022. 8. 1. 23:04
반응형
자바 - 데몬스레드 vs 사용자스레드 (daemon thread vs user thread)
자바에서 스레드는 크게 데몬스레드와 사용자스레드로 구분할수 있습니다. 여기에서는 일반스레드인 사용자스레드와 데몬스레드간의 차이점과 데몬스레드를 생성하여 사용하는 방법에 대해서 알아보도록 하겠습니다.
목차
- 데몬스레드 vs 사용자스레드
- 데몬스레드 생성방법
- 데몬스레드 사용예제
1. 데몬스레드 vs 사용자스레드
사용자스레드(user thread)는 foreground에서 실행되는 높은 우선순위를 가진 스레드입니다. 자바 프로그램을 실행시키면 JVM은 main()메서드가 실행되는 main스레드를 생성하는데 이 main스레드가 사용자스레드입니다. 그리고 main스레드에서 새로운 스레드를 생성하게 되면 부모 스레드의 속성을 상속받아 기본적으로 사용자스레드가 되며, 이렇게 생성된 사용자스레드들이 모두 종료하게 되면 그 프로그램은 종료하게 됩니다.
데몬스레드(daemon thread)는 background에서 실행되는 낮은 우선순위를 가진 스레드입니다. 주로 보조적인 역할을 담당하는데 사용되며, 자바에서 메모리 정리를 해주는 가비지 컬렉터(garbage collector)가 대표적인 데몬스레드입니다. 데몬스레드와 사용자스레드의 가장 큰 차이점은 JVM이 데몬스레드가 작업이 끝날때까지 기다리지 않는다는 점입니다. 사용자스레드가 모두 종료되면 데몬스레드는 자동으로 종료됩니다.
2. 데몬스레드 생성방법
데몬스레드를 만드는 방법은 먼저 스레드 객체를 만든 후 스레드 실행 요청 전에 setDaemon() 메소드를 이용해서 데몬스레드로 동작하도록 설정하시면 됩니다.
- MyThread mt1 = new MyThread();
- mt1.setDaemon(true); // true로 설정시 데몬스레드로 동작함
- mt1.start();
3. 데몬스레드 사용예제
1) 스레드 클래스 정의
public class MyThread extends Thread {
public void run() {
try {
int count=0;
while(true) {
System.out.print(count++);
Thread.sleep(200);
}
} catch (InterruptedException e) {
System.out.print("Interrupted!!!!!");
}
}
}
2) 객체 생성 및 실행
public class HelloWorld {
public static void main(String[] args) {
MyThread mt1 = new MyThread();
mt1.setDaemon(true);
mt1.start();
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
3) 실행결과
0123456789
반응형