1. setDaemon需要在start方法调用之前使用
2. 线程划分为用户线程和后台(daemon)进程,setDaemon将线程设置为后台进程
3. 如果jvm中都是后台进程,当前jvm将exit。(随之而来的,所有的一切烟消云散,包括后台线程啦)
4. 主线程结束后,
1)用户线程将会继续运行
2) 如果没有用户线程,都是后台进程的话,那么jvm结束
另外:
setDaemon方法把java的线程设置为守护线程,此方法的调用必须在线程启动之前执行。只有在当前jvm中所有的线程都为守护线程时,jvm才会退出。
如果创建的线程没有显示调用此方法,这默认为用户线程。
实例如下:
import java.io.IOException;
public class DaemonThreadTest extends Thread{
publicDaemonThreadTest() {
}
public voidrun(){
for(int i = 1; i <= 100;i++){
try{
Thread.sleep(100);
} catch (InterruptedException ex){
ex.printStackTrace();
}
System.out.println(i);
}
}
publicstatic void main(String [] args){
DaemonThreadTest test = newDaemonThreadTest();
// 如果不设置daemon,那么线程将输出100后才结束
test.setDaemon(true); //在test未结束前,执行下面的输入操作,则test终止执行,因为jvm中只剩下守护线程时会终止
test.start();
System.out.println("isDaemon = " +test.isDaemon());
try {
System.in.read(); //接受输入,使程序在此停顿,一旦接收到用户输入,main线程结束,守护线程自动结束
} catch (IOException ex) {
ex.printStackTrace();
}
System.out.print(Thread.currentThread().getName()+"结束");
}
}