Thread의 setDaemon(true) 방법의 역할

정의: 수호 스레드 -'서비스 스레드'라고도 부른다. 사용자 스레드가 없을 때 자동으로 떠난다.우선순위: 수호 라인의 우선순위가 비교적 낮아서 시스템의 다른 대상과 라인에 서비스를 제공하는 데 사용됩니다.
설정: setDaemon(true)을 통해 라인을'수호 라인'으로 설정합니다.사용자 루트를 수호 루트로 설정하는 방법은 루트 대상을 만들기 전에 루트 대상을 사용하는 setDaemon 방법입니다.
example: 쓰레기 수거 루트는 고전적인 수호 루트입니다. 우리 프로그램에 더 이상 실행되는 Thread가 없으면 프로그램에 쓰레기가 생기지 않고 쓰레기 수거기도 할 일이 없습니다. 그래서 쓰레기 수거 루트가 JVM에 남은 루트일 때 쓰레기 수거 루트는 자동으로 떠납니다.시스템의 재활용 리소스를 실시간으로 모니터링하고 관리하기 위해 항상 낮은 수준에서 실행됩니다.
라이프 사이클: 데몬(Daemon)은 백그라운드에서 실행되는 특수 프로세스입니다.그것은 제어 단말기에 독립되어 주기적으로 어떤 임무를 수행하거나 발생하는 사건을 처리하기를 기다린다.즉, 수호 라인은 단말기에 의존하지 않지만 시스템에 의존하여 시스템과'동생공사'하는 것이다.그럼 자바의 수호 라인은 어떤 모양일까요?JVM의 모든 스레드가 수호 스레드일 때 JVM은 종료할 수 있습니다.하나 이상의 비수호 스레드가 있는 경우 JVM은 종료되지 않습니다.
예제 프로그램:
thread = new Thread(this);
thread.setDaemon(true);
thread.start();
자바 가상기에서 비수호 라인이 실행되지 않을 때 자바 가상 기회가 닫힙니다.모든 일반적인 스레드가 실행된 후에, 수호 스레드는 어디를 실행하든지 가상 머신이 실행을 종료합니다.그래서 당신의 수호 라인은 프로그램의 업무 논리에 영향을 줄 수 있는 것을 쓰지 않는 것이 가장 좋다.그렇지 않으면 프로그램에 도대체 무슨 문제가 생길지 예측할 수 없다.
import java.io.IOException;
/*
* 서비스 가능한 사용자 스레드가 없을 때 자동으로 스레드를 분리합니다.
*Java에서 비교적 특수한 스레드는 수호(Daemon) 스레드라고 불리는 저급 스레드입니다.
*이 스레드는 시스템의 다른 대상과 스레드에 서비스를 제공하는 데 사용되는 최저 우선순위를 가지고 있다.
* 사용자 스레드를 수호 스레드로 설정하는 방법은 스레드 대상이 만들어지기 전에 스레드 대상을 호출하는 setDaemon 방법입니다.
*일반적인 데몬 스레드의 예는 JVM의 시스템 리소스 자동 회수 스레드입니다.
*우리가 잘 알고 있는 Java 스팸 회수 스레드는 전형적인 수호 스레드입니다.
* 프로그램이 더 이상 실행 중인 Thread가 없는 경우
*프로그램이 더 이상 쓰레기가 발생하지 않고 쓰레기 수거기도 할 일이 없다.
* 따라서 스팸 수거 스레드가 자바 가상 기기에서 남은 스레드일 때 자바 가상 기회는 자동으로 떠납니다.
* 시스템의 재활용 리소스를 실시간으로 모니터링하고 관리하기 위해 항상 낮은 수준에서 실행됩니다.
* 데몬(Daemon)은 백그라운드에서 실행되는 특수 프로세스입니다.그것은 제어 단말기에 독립되어 주기적으로 어떤 임무를 수행하거나 발생하는 사건을 처리하기를 기다린다.
*즉, 수호 라인은 단말기에 의존하지 않지만 시스템에 의존하여 시스템과'동생공사'를 한다.
*그럼 자바의 수호 라인은 어떤 모양일까.
*JVM의 모든 스레드가 수호 스레드일 때 JVM은 종료할 수 있습니다.
* 하나 이상의 비수호 스레드가 있는 경우 JVM은 종료되지 않습니다.
*/
 
public class ThreadDemo extends Thread {
 
public ThreadDemo() {
 
super("zhuyong");
 
}
 
/** *//**
 
*  run , 
 
*/
 
public void run(){
 
for(int i = 1; i <= 40; i++){
 
try{
 
Thread.sleep(100);
 
} catch (InterruptedException ex){
 
ex.printStackTrace();
 
}
 
System.out.println("TestThread: "+Thread.currentThread().getName() +i);
 
}
 
}
 
public static void main(String [] args){
 
ThreadDemo test = new ThreadDemo();
 
test.setDaemon(true);
 
test.start();
 
System.out.println("isDaemon = " + test.isDaemon());
 
try {
 
System.in.read(); //  , , ,main , 
 
} catch (IOException ex) {
 
ex.printStackTrace();
 
} 

}
 
}

좋은 웹페이지 즐겨찾기