자바 스레드(Thread) 간단 정리

2022. 1. 23. 12:37·💻 개발/Java

모든 자바 프로그램은 기본적으로 스레드를 사용한다. JVM이 실행되면 main 메서드를 실행할 주 스레드뿐 아니라 가비지 컬렉션이나 객체 종료(Object Finalization)와 같은 JVM 내부 작업을 담당할 스레드도 생성된다.

자바 언어에서 사용할 수 있는 스레드(Thread)는 크게 데몬 스레드(Daemon Thread)와 일반 스레드(Non-daemon thread)로 나뉜다.

 

Daemon Thread

자바에서 데몬 스레드(Daemon Thread)는 다른 일반 스레드의 작업을 돕는 보조적인 역할을 수행하는 스레드이다. 다른 말로 하면 다른 스레드에 대한 백그라운드 스레드를 지원하는 특수한 스레드라고 할 수 있다. 

JVM이 처음 시작될 때 main 스레드를 제외하고 JVM이 내부적으로 사용기 위해 실행되는 모든 스레드는 데몬 스레드이며 가장 대표적인 데몬 스레드가 바로 가비지 컬렉터 스레드이다.

새로운 스레드가 생성 될 때는 자신을 생성해준 부모 스레드의 데몬 설정 상태 값을 확인해 그 값을 그대로 사용한다.(부모 스레드가 데몬 스레드이면 자식 스레드의 기본 상태도 데몬) 따라서 main 스레드에서 생성한 모든 스레드는 기본적으로 데몬 스레드가 아닌 일반 스레드가 된다. 데몬 스레드를 생성하고 싶다면 Thread의 setDaemon() 메서드에 true 값을 설정해준다.  

 

일반 스레드(Non-daemon Thread)와 데몬 스레드의 차이

일반 스레드와 데몬 스레드는 프로그램이 종료될 때 처리 방법이 약간 다를 뿐 그 외에는 모든 것이 동일하다.

스레드가 하나 종료되면 JVM은 남아있는 모든 스레드 가운데 일반 스레드가 남아있는지 확인한다. 만약 일반 스레드는 모두 종료되고 남아있는 스레드가 모두 데몬 스레드라면 JVM은 즉시 종료 절차를 진행한다. 즉 JVM이 종료될 때 모든 데몬 스레드는 버려지게 된다. 

이러한 데몬 스레드의 특성 때문에 보통은 부수적인 용도로 사용하는 경우가 많다.

저작자표시 (새창열림)
'💻 개발/Java' 카테고리의 다른 글
  • Java - Object.clone()
  • Lombok - getter/setter의 prefix 관련 설정
  • Guava EventBus 간단 사용법
  • Java BigDecimal 크기 비교하기
개발자영준
개발자영준
Java Backend 개발자의 블로그입니다.
  • 개발자영준
    Developer YoungJun
    개발자영준
  • 전체
    오늘
    어제
    • 분류 전체보기 (18)
      • 💻 개발 (14)
        • Java (8)
        • Spring Framework (0)
        • JPA (1)
        • Nginx (1)
        • MySQL (2)
        • Kafka (1)
        • 개발관련 툴 (1)
      • 🎮 컴퓨터,취미 (4)
  • 블로그 메뉴

    • 홈
    • 개발
    • 취미
    • 소개
    • 문의
    • 개인정보처리방침
    • 태그
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    Java
    eventbus
    Guava
    Java Concurrency in Practice
    Stream
    윈도우10
    JPQL
    X220
    Mockito
    Java8
    test
    docker
    Windows10
    mysql
    배터리스웰링
    Kotlin
    Vacuous Truth
    맥북 배터리 교체
    transaction
    맥북 분해
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
개발자영준
자바 스레드(Thread) 간단 정리
상단으로

티스토리툴바