Java线程
- 用户线程
- 守护线程
守护线程是一种特殊的线程,当进程中不存在非守护线程了,则守护线程自动销毁。
只要当前JVM实例中存在任何一个非守护线程没有结束,守护线程就在工作,只有当最后一个非守护线程结束时,守护线程才随着JVM一同结束工作。
Daemon的作用是为其他线程的运行提供便利服务,应用GC(垃圾回收器)。
判断线程是不是守护线程
t.isDaemon();
通过验证main线程不是守护线程。
下面看关于一个守护线程的例子:
“`
public static void main(String[] args) {
Thread t = new Thread(new MyThread234());
t.isDaemon();
t.setDaemon(true);
t.start();
try {
Thread.sleep(5000);
System.out.println(“main 线程执行完毕了”);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
class MyThread234 implements Runnable{
int i ;
@Override
public void run() {
// TODO Auto-generated method stub
while(true) {
i++;
System.out.println(i);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
上述例子中有一个用户线程,一个是守护线程,当main线程执行完毕,因为没有其他的非守护线程,守护线程也会销毁,不在打印数据。如果不设置为守护进程,那么会一直打印数据。