JAVA/포스팅

자바 데몬 쓰레드(daemon thread)

짜집퍼박사(짜박) 2023. 11. 21. 23:49

자바에서 데몬 쓰레드(daemon thread)는 일반 쓰레드의 보조 역할을 하는 쓰레드입니다. 주 쓰레드(메인 쓰레드)가 종료되면 데몬 쓰레드는 강제적으로 종료되며, 주 쓰레드가 실행 중이면 데몬 쓰레드는 계속해서 실행됩니다.

데몬 쓰레드는 주로 백그라운드 작업을 수행하거나 주 쓰레드들을 지원하는 역할을 합니다. 예를 들어, 가비지 컬렉션, 자동 저장 등이 데몬 쓰레드로 구현될 수 있습니다.

 

데몬 쓰레드 생성

데몬 쓰레드를 생성하려면 해당 쓰레드 객체를 생성한 후 setDaemon(true) 메서드를 호출해야 합니다.

Thread daemonThread = new Thread(new MyDaemonRunnable());
daemonThread.setDaemon(true);
daemonThread.start();

또는 일반적인 쓰레드 생성 방법에서 생성자에 true를 전달하여 데몬 쓰레드를 만들 수도 있습니다.

Thread daemonThread = new Thread(new MyDaemonRunnable(), "DaemonThread");
daemonThread.setDaemon(true);
daemonThread.start();

 

주의사항

1. 데몬 쓰레드를 만들기 전에 setDaemon(true)를 호출해야 합니다. 그렇지 않으면 IllegalThreadStateException이 발생합니다.
2. 데몬 쓰레드는 일반 쓰레드 또는 다른 데몬 쓰레드의 자식으로 만들어져야 합니다.
3. 데몬 쓰레드는 주 쓰레드가 종료되면 자동으로 종료됩니다. 따라서 주 쓰레드가 실행 중이면 데몬 쓰레드는 계속해서 실행됩니다.
4. 데몬 쓰레드는 일반 쓰레드에 비해 우선순위가 낮습니다.

public class DaemonThreadExample {
    public static void main(String[] args) {
        Thread daemonThread = new Thread(new MyDaemonRunnable(), "DaemonThread");
        daemonThread.setDaemon(true);
        daemonThread.start();

        System.out.println("Main thread is finished.");
    }
}

class MyDaemonRunnable implements Runnable {
    public void run() {
        try {
            while (true) {
                System.out.println("Daemon thread is running.");
                Thread.sleep(1000);
            }
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

위의 예제에서 MyDaemonRunnable은 데몬 쓰레드로 실행됩니다. main 메서드에서는 데몬 쓰레드를 생성하고 시작한 후에 "Main thread is finished."를 출력하게 됩니다. 이후에는 데몬 쓰레드가 계속해서 "Daemon thread is running."을 출력하며 실행됩니다. 주의할 점은 "Main thread is finished."가 출력된 후에도 데몬 쓰레드는 계속 실행 중임을 알 수 있습니다.

 

With ChatGPT

'JAVA > 포스팅' 카테고리의 다른 글

자바 쓰레드의 동기화  (0) 2023.11.21
자바 쓰레드의 실행제어  (0) 2023.11.21
자바 쓰레드 그룹(thread group)  (0) 2023.11.21
자바 쓰레드의 우선순위  (0) 2023.11.21
자바 멀티쓰레드  (0) 2023.11.21