这段时间在看别人的代码,其中用到了线程。有一个方法setDaemon,不知道是什么意思,于是到google上搜索了一下。
"守护线程",当setDaemon(true)的时候,说明该线程是守护线程。
守护线程: 在Java里面的定义是,如果虚拟机中只有守护线程在运行,则虚拟机退出。虚拟机中可能会同时有很多个线程在运行,只有当所有的非守护线程都结束的时候,虚拟机的进程才会结束,不管在运行的线程是不是main()线程。
当a.setDaemon(true);的时候,控制台将输出:
TestDaemon Running!!!0
TestDaemon Running!!!1
...
TestDaemon Running!!!232
如果当a.setDaemon(false);的时候,控制台将输出:
TestDaemon Running!!!0
TestDaemon Running!!!1
...
TestDaemon Running!!!232
...
实际上servlet就是一个守护线程,我们可以用下面的代码去测试:
"守护线程",当setDaemon(true)的时候,说明该线程是守护线程。
守护线程: 在Java里面的定义是,如果虚拟机中只有守护线程在运行,则虚拟机退出。虚拟机中可能会同时有很多个线程在运行,只有当所有的非守护线程都结束的时候,虚拟机的进程才会结束,不管在运行的线程是不是main()线程。
public class TestDaemon implements Runnable{
private int count=0;
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Thread a=new Thread(new TestDaemon(),"TestDaemon");
a.setDaemon(true);
a.start();
}
@Override
public void run() {
// TODO Auto-generated method stub
while(true){
System.out.println("TestDaemon Running!!!"+count++);
}
}
}
当a.setDaemon(true);的时候,控制台将输出:
TestDaemon Running!!!0
TestDaemon Running!!!1
...
TestDaemon Running!!!232
如果当a.setDaemon(false);的时候,控制台将输出:
TestDaemon Running!!!0
TestDaemon Running!!!1
...
TestDaemon Running!!!232
...
实际上servlet就是一个守护线程,我们可以用下面的代码去测试:
System.out.println(Thread.currentThread().isDaemon());//输出:true