Programming/Process & Multi Threading

[Java] Main Thread(메인 스레드)와 Worker Thread(작업 스레드) 그리고 Daemon Thread(데몬 스레드)

dev.pudding 2023. 12. 13. 22:27
728x90

JVM의 스레드 구조 

JVM에서의 스레드 구조는 크게 메인 스레드(Main Thread)와 워커 스레드(Worker Thread) 그리고 데몬 스레드(Daemon thread)로 나누어진다.

 

https://javarevisited.blogspot.com/2012/03/what-is-daemon-thread-in-java-and.html#axzz8LmISxyFv

 

스레드의 종류 

 Main Thread (메인 스레드)

자바의 엔트리포인트는 main메소드이다. 즉 자바가 실행되면 무조건 먼저 실행되는 부분은 main메소드이며 이를 실행하는 스레드의 이름은 main thread이다.

public class App{
	public static void main(String[] args){
    	
        String name = Thread.currentThread().getName(); //실행중인 스레드 이름, main thread
    }
}

 

 

워커스레드(worker thread)

자바를 멀티스레드 환경으로 실행시키고 싶다면 Runnable 인터페이스나 Thread클래스를 사용하여 사용자정의 스레드를 만들어야한다. 주로 백그라운드에서 동작하는 작업을 수행하며 이를 워커 스레드(Worker Thread) 혹은 메인스레드의 자식 스레드(Child Thread)라고 한다

public class MyMain{
	public static void main(String[] args){
    	System.out.println("메인스레드");
        
        Thread t1 = new Thread(new Runnable(){
        	@Override
            public void run(){
            	System.out.println("워커스레드");
            }
        });
    }
}

 

 

데몬스레드 (Daemon Thread)

데몬스레드(Daemon Thread)는 백그라운드에서 워커스레드의 작업을 돋는 보조적인 역할을 수행하며, 가장 낮은 우선순위를 가진 스레드이다. 주로 무한 루프를 돌면서 특정 작업을 수행한다. 

class Daemon implements Runnable {
    @Override
    public void run() {
        while (true) {
            try {
                Thread.sleep(1000);
            } catch (Exception e) {
                // TODO: handle exception
            }

            System.out.println("데몬스레드");
        }
    }
}

class Worker implements Runnable {
    @Override
    public void run() {
        try {
            Thread.sleep(3000);
        } catch (Exception e) {
            // TODO: handle exception
        }

        System.out.println("워커스레드");

    }
}

public class MyMain {
    public static void main(String[] args) {
        Thread t1 = new Thread(new Daemon());
        Thread t2 = new Thread(new Worker());

        t1.setDaemon(true);// 데몬 스레드 설정
        t1.start();
        t2.start();

    }
}

데몬 스레드는 무한루프를 설정해두고 워커 스레드는 3초 후에 멈추도록 설정해두었다. 워커 스레드가 종료되자마자 데몬 스레드도 실행이 멈췄다.

 

 

데몬 스레드와 워커 스레드 간의 종속성

  • 데몬 스레드는 보조적인 역할을 수행하며, 주로 워커 스레드의 작업을 돕는 역할을 한다.
  • 데몬 스레드는 메인 스레드나 워커 스레드가 종료되면 JVM에 의해 자동으로 종료된다.