[Java] Daemon Thread

2024. 9. 14. 16:08·Spring Framework/Multi Thread Programming
반응형

Goal

1. 데몬 스레드와 사용자 스레드의 차이점에 대해 이해한다.

2. 데몬 스레드의 생성 방법에 대해 이해한다.


#1 데몬 스레드 & 사용자 스레드

자바에서 스레드는 사용자 스레드와 데몬 스레드로 구분한다. 

사용자 스레드는 Thread Class 를 상속받거나, Runnable 인터페이스를 구현하는 방식으로 생성한다. 

 

[Java] 쓰레드 생성 방법 Thread & Runnable Interface

✨Goal1. Thread Class를 상속받아 스레드를 생성하는 방법에 대해 숙지한다.2. Runnable Interface를 구현하여 스레드를 생성하는 방법에 대해 숙지한다. 자바에서 스레드를 생성하는 방법은 Thread 클래스

novlog.tistory.com

 

자바 프로그램은 현재 프로세스 내부에 동작하고 있는 스레드가 모두 종료 상태로 들어간 후에 종료된다.  

반면 사용자 스레드와 달리 데몬 스레드는 부가적인 스레드이다. 

사용자 스레드가 모두 종료되면, 데몬 스레드의 실행 여부와 관계 없이 자바 프로그램이 종료된다. 

 

대표적으로 백그라운드에서 돌아가는 프로세스나, 알림 , 메모리 관리, 네트워크 연결 관리 등 과 같은 기능들은 굳이 사용자 스레드로 생성할 필요가 없다. 

따라서 상대적으로 중요하지 않은 작업을 처리하는 스레드나, 굳이 완료되지 않아도 되는 작업을 처리하는 스레드를 "데몬 스레드"로 생성하면 효율적이다.


#2 데몬 스레드 생성 방법

데몬 스레드 또한 사용자 스레드와 동일하게 Thread 클래스를 상속받거나 Runnable 인터페이스를 구현하는 방식으로 생성한다.

데몬 스레드 객체 선언 후 setDaemon 메서드를 true로 설정해 주면 된다. 

단, setDaemon으로 데몬 스레드를 명시하는 코드는 반드시 start() 메서드 실행 전에 작성해 주어야 한다.

public class DemonThreadMain {
    public static void main(String[] args) {

        DaemonThread daemonThread = new DaemonThread();
        daemonThread.setDaemon(true);
        daemonThread.start();

    }

    static class DaemonThread extends Thread {
        @Override
        public void run() {
			...
        }
    }


}

 

데몬 스레드 예제

다음은 데몬 스레드와 사용자 스레드를 생성 후 각각 10초, 3초 씩 실행한 예제 코드이다.

출력 결과를 보면 데몬 스레드의 종료 여부와 관계 없이 사용자 스레드의 작업이 모두 종료된 시점인 3초 후 프로세스가 종료되는 것을 확인할 수 있다.

package thread.start;

public class DemonThreadMain {
    public static void main(String[] args) {

        // Daemon Thread 10s 실행
        DaemonThread daemonThread = new DaemonThread();
        daemonThread.setDaemon(true);
        daemonThread.setName("Daemon Thread");
        daemonThread.start();

        // User Thread 1s 실행
        UserThread userThread = new UserThread();
        userThread.setName("User Thread");
        userThread.start();

    }

    static class DaemonThread extends Thread {
        @Override
        public void run() {
            System.out.println(Thread.currentThread().getName() + ": run()");
            try {
                Thread.sleep(10000); // 10초간 실행
            } catch (InterruptedException e) {
                throw new RuntimeException(e);
            }
            System.out.println(Thread.currentThread().getName() + ": run end()");
        }
    }

    static class UserThread extends Thread {
        @Override
        public void run() {
            System.out.println(Thread.currentThread().getName() + " : run()");
            try {
                Thread.sleep(3000); // 3초간 실행
            } catch (InterruptedException e) {
                throw new RuntimeException(e);
            }
            System.out.println(Thread.currentThread().getName() + ": run end()");
        }
    }
}
Daemon Thread: run()
User Thread : run()
User Thread: run end()
반응형
저작자표시 비영리 변경금지 (새창열림)

'Spring Framework > Multi Thread Programming' 카테고리의 다른 글

[Java] Multi Thread Memory Visibility & Volatile Keyword  (1) 2024.10.04
[Java] 쓰레드 생성 방법 Thread & Runnable Interface  (1) 2024.09.12
'Spring Framework/Multi Thread Programming' 카테고리의 다른 글
  • [Java] Multi Thread Memory Visibility & Volatile Keyword
  • [Java] 쓰레드 생성 방법 Thread & Runnable Interface
novs
novs
https://github.com/novvvv
  • novs
    nov.Zip
    novs
  • 전체
    오늘
    어제
    • All (381)
      • Project (2)
        • Rag Blog (2)
      • Spring Framework (27)
        • Java Fundamental (13)
        • SpringSecurity (1)
        • Multi Thread Programming (3)
        • Spring Framework (3)
        • JPA (4)
      • Security (2)
      • Cloud (2)
        • Docker (1)
        • AWS (1)
      • Mobile Development (0)
      • dev (7)
        • Git (2)
        • React (2)
        • Android (1)
        • Computer Science (2)
      • Algorithm (29)
        • PS With C++ (8)
        • Algorithm (2)
        • BOJ (16)
        • AtCoder (3)
      • Archive (312)
        • 동아리 사이트 개발일지 (3)
        • 카페 주문 시스템 (3)
        • UIKit (2)
        • Swift Language (3)
        • PS With Swift (2)
        • Next.js (3)
        • React (2)
        • Git (1)
        • Linux (3)
        • Vue.js (2)
        • Flutter (11)
        • ...2022 (34)
        • ...2024 (2)
        • C# (14)
        • C&C++ (47)
        • GameDevelop (19)
        • WEB (32)
        • CS (7)
        • Algorithm (13)
        • ProblemSolving (105)
        • Daily (2)
  • 블로그 메뉴

    • 홈
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    C++문법
    유니티
    고득점키트
    C언어
    스택
    소스코드
    C++
    c#
    BOJ
    C
    문제풀이
    js
    sort
    알고리즘
    자료구조
    HTML
    코딩테스트
    다이나믹프로그래밍
    BFS
    dp
    STL
    백준
    객체지향
    프로그래머스
    자바스크립트
    javascript
    깃허브
    안드로이드스튜디오
    그리디
    깃
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
novs
[Java] Daemon Thread
상단으로

티스토리툴바