线程分类: 线程分为用户线程和守护线程 虚拟机必须确保用户线程执行完毕 虚拟机不用等待守护线程执行完毕(后台记录操作日志、监控内存、垃圾回收等)
setDaemon(true) 将线程设置为守护线程(默认为false 代表用户线程)
守护线程实例
//测试守护线程
//上帝守护你
public class TestDeamon {
public static void main(String[] args) {
You you = new You();
God god = new God();
Thread godThread = new Thread(god);
godThread.setDaemon(true); //默认为false(即用户线程)
godThread.start(); //运行守护线程(上帝)
new Thread(you).start(); //运行用户线程(你)
}
}
//你
class You implements Runnable{
@Override
public void run() {
for (int i = 0; i < 10; i++) {
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("你还活着");
}
System.out.println("=====你已长眠=====");
}
}
//上帝
class God implements Runnable{
@Override
public void run() {
while (true){
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("上帝正在守护你");
}
}
}
运行效果
可以看到,当"你"已长眠后,即用户线程终止后,"上帝"线程也一同终止,即使上帝线程的run()方法体中使用的是while(true)