아무도 데몬 스레드가 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 같은 배경에서 일부 작업을하고있는 것으로 간주 스레드입니다.
프로그램에 데몬 스레드 만 남아 있으면 종료됩니다. 일반적으로 이러한 스레드는 일반 스레드와 함께 작동하고 이벤트의 백그라운드 처리를 제공하기 때문입니다.
메소드 를 사용하여 Thread
a를 데몬으로 지정할 수 있습니다. setDaemon
일반적으로 종료되지 않고 중단되지 않습니다. 응용 프로그램이 중지되면 중지됩니다.