[java] Java에서 데몬 스레드는 무엇입니까?

아무도 데몬 스레드가 Java에 무엇인지 말해 줄 수 있습니까 ?



답변

데몬 스레드는 프로그램이 완료되었지만 스레드가 여전히 실행 중일 때 JVM이 종료되지 않도록하는 스레드입니다. 데몬 스레드의 예는 가비지 수집입니다.

스레드를 시작하기 전에이 setDaemon(boolean)메소드를 사용하여 Thread디먼 특성 을 변경할 수 있습니다 .


답변

몇 가지 추가 사항 (참조 : Java Concurrency in Practice )

  • 새 스레드가 작성되면 상위 스레드의 디먼 상태를 상속합니다.
  • 데몬 이외의 스레드가 모두 완료되면 JVM이 중지되고 나머지 데몬 스레드는 모두 폐기됩니다 .

    • 마지막으로 블록은 실행되지 않습니다 .
    • 스택이 풀리지 않습니다-JVM이 종료됩니다.

    이러한 이유로 데몬 스레드는 드물게 사용해야하며 모든 종류의 I / O를 수행 할 수있는 작업에는 데몬 스레드를 사용하는 것이 위험합니다.


답변

위의 모든 답변이 좋습니다. 차이점을 설명하기 위해 간단한 작은 코드 스 니펫이 있습니다. 의 true 및 false 값을 각각 사용해보십시오 setDaemon.

public class DaemonTest {

    public static void main(String[] args) {
        new WorkerThread().start();

        try {
            Thread.sleep(7500);
        } catch (InterruptedException e) {
            // handle here exception
        }

        System.out.println("Main Thread ending") ;
    }

}

class WorkerThread extends Thread {

    public WorkerThread() {
        // When false, (i.e. when it's a user thread),
        // the Worker thread continues to run.
        // When true, (i.e. when it's a daemon thread),
        // the Worker thread terminates when the main 
        // thread terminates.
        setDaemon(true);
    }

    public void run() {
        int count = 0;

        while (true) {
            System.out.println("Hello from Worker "+count++);

            try {
                sleep(5000);
            } catch (InterruptedException e) {
                // handle exception here
            }
        }
    }
}


답변

전통적으로 UNIX의 데몬 프로세스는 Windows의 서비스와 매우 유사하게 백그라운드에서 지속적으로 실행되는 프로세스였습니다.

Java의 데몬 스레드는 JVM이 종료되는 것을 방해하지 않는 스레드입니다. 특히 데몬 스레드 만 남아 있으면 JVM이 종료됩니다. 의 setDaemon()메소드를 호출하여 하나를 작성 합니다 Thread.

데몬 스레드를 읽습니다 .


답변

데몬 스레드는 데몬 스레드와 동일한 프로세스에서 실행되는 다른 스레드 또는 개체에 대한 서비스 공급자와 같습니다. 데몬 스레드는 백그라운드 지원 작업에 사용되며 일반 스레드가 실행되는 동안에 만 필요합니다. 일반 스레드가 실행 중이 지 않고 나머지 스레드가 데몬 스레드 인 경우 인터프리터가 종료됩니다.

예를 들어, HotJava 브라우저는 “Image Fetcher”라는 데몬 스레드를 최대 4 개까지 사용하여 파일 시스템이나 네트워크에서 필요한 스레드에 대한 이미지를 가져옵니다.

데몬 스레드는 일반적으로 응용 프로그램 / 애플릿에 대한 서비스를 수행하는 데 사용됩니다 (예 : “피 들리 비트”로드). 사용자 스레드와 데몬 스레드의 핵심 차이점은 모든 사용자 스레드가 종료 된 경우에만 JVM이 프로그램을 종료한다는 것입니다. 기본 실행 스레드를 포함하여 더 이상 사용자 스레드가 실행되고 있지 않으면 데몬 스레드가 JVM에 의해 종료됩니다.

setDaemon (true / false)? 이 메소드는 스레드가 데몬 스레드임을 지정하는 데 사용됩니다.

공개 부울 isDaemon ()? 이 메소드는 스레드가 디먼 스레드인지 여부를 판별하는 데 사용됩니다.

예 :

public class DaemonThread extends Thread {
    public void run() {
        System.out.println("Entering run method");

        try {
            System.out.println("In run Method: currentThread() is" + Thread.currentThread());

            while (true) {
                try {
                    Thread.sleep(500);
                } catch (InterruptedException x) {}

                System.out.println("In run method: woke up again");
            }
        } finally {
            System.out.println("Leaving run Method");
        }
    }
    public static void main(String[] args) {
        System.out.println("Entering main Method");

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

        try {
            Thread.sleep(3000);
        } catch (InterruptedException x) {}

        System.out.println("Leaving main method");
    }

}

산출:

C:\java\thread>javac DaemonThread.java

C:\java\thread>java DaemonThread
Entering main Method
Entering run method
In run Method: currentThread() isThread[Thread-0,5,main]
In run method: woke up again
In run method: woke up again
In run method: woke up again
In run method: woke up again
In run method: woke up again
In run method: woke up again
Leaving main method

C:\j2se6\thread>


답변

데몬의 정의 (컴퓨팅) :

인쇄 스풀링 및 파일 전송과 같은 서비스 요청을 처리하고 필요하지 않은 경우 유휴 상태 인 백그라운드 프로세스입니다.

—— 출처 : Oxford Dictionary의 영어

Java에서 데몬 스레드 란 무엇입니까?

  • 데몬 스레드는 흐름 사이에 언제든지 종료 할 수 있습니다. 비 데몬, 즉 사용자 스레드는 완전히 실행됩니다.
  • 데몬 스레드는 데몬 이외의 다른 스레드가 실행되는 동안 백그라운드에서 간헐적으로 실행되는 스레드입니다.
  • 비 데몬 스레드가 모두 완료되면 데몬 스레드가 자동으로 종료됩니다.
  • 데몬 스레드는 동일한 프로세스에서 실행되는 사용자 스레드에 대한 서비스 공급자입니다.
  • JVM은 실행 상태에있을 때 데몬 스레드가 완료되는 것을 신경 쓰지 않으며, 마지막으로 블록을 실행해도됩니다. JVM은 우리가 만든 데몬 이외의 스레드를 우선시합니다.
  • 데몬 스레드는 Windows에서 서비스 역할을합니다.
  • 데몬 스레드와 달리 모든 사용자 스레드가 종료되면 JVM이 데몬 스레드를 중지합니다. 따라서 데몬 스레드는 예를 들어 모든 사용자 스레드가 중지 되 자마자 JVM에 의해 스레드가 중지 될 때 모니터링 기능을 구현하는 데 사용될 수 있습니다.

답변

데몬 스레드 응용 프로그램에서 존재할 수 처리 요청이나 다양한 chronjobs 같은 배경에서 일부 작업을하고있는 것으로 간주 스레드입니다.

프로그램에 데몬 스레드 만 남아 있으면 종료됩니다. 일반적으로 이러한 스레드는 일반 스레드와 함께 작동하고 이벤트의 백그라운드 처리를 제공하기 때문입니다.

메소드 를 사용하여 Threada를 데몬으로 지정할 수 있습니다. setDaemon일반적으로 종료되지 않고 중단되지 않습니다. 응용 프로그램이 중지되면 중지됩니다.