线程分为用户线程和守护线程,虚拟机必须确保用户线程执行完毕,而不用等到守护线程执行完毕。守护线程比如后台记录操作日志、监控内存、垃圾回收
main线程以及自己开启的线程默认为用户线程。你可以用setDaemon(true)
将用户线程变为守护线程。虚拟机不会等待守护线程结束。
下面举例,You是用户线程,God是守护线程。God线程一直循环执行,但最后程序仍然会终止
public class TestThreadDaemon {
public static void main(String[] args) {
Shangdi shangdi = new Shangdi();
You you = new You();
//上帝的线程
Thread threadshangdi = new Thread(shangdi);
//设置为守护线程
threadshangdi.setDaemon(true);
threadshangdi.start();
//你的线程
new Thread(you).start();
}
}
class Shangdi implements Runnable{
@Override
public void run() {
while(true){
System.out.println("上帝一直保佑着你");
}
}
}
class You implements Runnable{
@Override
public void run() {
for (int i = 0; i < 5000; i++) {
System.out.println("我还活着"+i);
}
System.out.println("我死了");
}
}