在java線程中有兩種線程,一種是用戶線程,另一種是守護(hù)線程。守護(hù)線程是一種特殊的線程,它的特殊有“陪伴”的含義,當(dāng)進(jìn)程中不存在非守護(hù)線程了,則守護(hù)線程自動(dòng)銷毀。典型的守護(hù)線程就是垃圾回收線程,當(dāng)進(jìn)程中沒有非守護(hù)進(jìn)程了,則垃圾回收線程也就沒有存在的必要了,自動(dòng)銷毀。用一個(gè)比較通俗的比喻來解釋一下“守護(hù)線程”:任何一個(gè)守護(hù)線程都是整個(gè)JVM中所有非守護(hù)線程的“保姆”,只要當(dāng)前JVM實(shí)例中存在任何一個(gè)非守護(hù)線程沒有結(jié)束,守護(hù)線程就在工作,只有當(dāng)最后一個(gè)非守護(hù)線程結(jié)束時(shí),守護(hù)線程才隨著JVM一同結(jié)束工作。Daemon的作用就是為其他線程的運(yùn)行提供便利服務(wù),守護(hù)線程最經(jīng)典的應(yīng)用就是GC(垃圾回收器),它是一個(gè)很稱職 的守護(hù)者。
/**
* MyThread線程測試
* @author wuyoushan
* @date 2017/3/21.
*/
public class MyThread extends Thread {
private int i=0;
@Override
public void run() {
try{
while(true){
i++;
System.out.println("i="+(i));
Thread.sleep(1000);
}
}catch(InterruptedException ex){
ex.printStackTrace();
}
}
}
/**
* @author wuyoushan
* @date 2017/3/20.
*/
public class Run {
public static void main(String[] args){
try {
MyThread thread = new MyThread();
thread.setDaemon(true);
thread.start();
Thread.sleep(5000);
System.out.println("我離開thread對象也不再打印了,也就是停止了!");
}catch (InterruptedException e){
e.printStackTrace();
}
}
}
運(yùn)行結(jié)果如下:
i=1
i=2
i=3
i=4
i=5
i=6
我離開thread對象也不再打印了,也就是停止了!
摘選自 java多線程核心編程技術(shù)-1.11