[Java] 사용자 쓰레드 vs 데몬 쓰레드

정재현·2024년 1월 18일

Java

목록 보기
36/43
post-thumbnail

사용자 쓰레드

  • 보이는 곳(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");
	        }
	    }
	}

profile
공부 기록 보관소

0개의 댓글