IT 개발/Java

[Java] 자바 - 데몬스레드 vs 사용자스레드 (daemon thread vs user thread)

KADOSHOLY 2022. 8. 1. 23:04
반응형

 

자바 - 데몬스레드 vs 사용자스레드 (daemon thread vs user thread)

 

 

자바에서 스레드는 크게 데몬스레드와 사용자스레드로 구분할수 있습니다. 여기에서는 일반스레드인 사용자스레드와 데몬스레드간의 차이점과 데몬스레드를 생성하여 사용하는 방법에 대해서 알아보도록 하겠습니다. 

 

 

   목차

  1. 데몬스레드 vs 사용자스레드
  2. 데몬스레드 생성방법
  3. 데몬스레드 사용예제

 

 

1. 데몬스레드 vs 사용자스레드

 

사용자스레드(user thread)는 foreground에서 실행되는 높은 우선순위를 가진 스레드입니다. 자바 프로그램을 실행시키면 JVM은 main()메서드가 실행되는 main스레드를 생성하는데 이 main스레드가 사용자스레드입니다. 그리고 main스레드에서 새로운 스레드를 생성하게 되면 부모 스레드의 속성을 상속받아 기본적으로 사용자스레드가 되며, 이렇게 생성된 사용자스레드들이 모두 종료하게 되면 그 프로그램은 종료하게 됩니다. 

 

데몬스레드(daemon thread)는 background에서 실행되는 낮은 우선순위를 가진 스레드입니다. 주로 보조적인 역할을 담당하는데 사용되며, 자바에서 메모리 정리를 해주는 가비지 컬렉터(garbage collector)가 대표적인 데몬스레드입니다. 데몬스레드와 사용자스레드의 가장 큰 차이점은 JVM이 데몬스레드가 작업이 끝날때까지 기다리지 않는다는 점입니다. 사용자스레드가 모두 종료되면 데몬스레드는 자동으로 종료됩니다.

 

 

 

2. 데몬스레드 생성방법

 

데몬스레드를 만드는 방법은 먼저 스레드 객체를 만든 후 스레드 실행 요청 전에 setDaemon() 메소드를 이용해서 데몬스레드로 동작하도록 설정하시면 됩니다. 

  1. MyThread mt1 = new MyThread();
  2. mt1.setDaemon(true);     // true로 설정시 데몬스레드로 동작함
  3. 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

 

반응형