后台线程,它是在后台运行的,它的任务是为其他线程提供服务,这种线程被称为“后台线程(Daemon Thread)”,又称为“守护线程”或“精灵线程”。JVM的垃圾回收线程就是典型的后台线程。
后台线程的特征:如果所有的前台线程都死亡了,后台线程也会自动死亡。
其余代码不变,调用Thread对象的setDaemon(true)可将制定线程设置为后台线程。所有的前台线程都死亡时,后天线程也死亡,程序就退出了。
class DaemonThread extends Thread{
public DaemonThread(String name){
super(name);
}
@Override
public void run(){
for(int i=0;i<100;i++){
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(getName()+"->"+i);
}
}
}
public class DaemonThreadTest {
public static void main(String[] args) {
DaemonThread daemonThread= new DaemonThread("后台线程");
daemonThread.setDaemon(true);//设置为后台线程
daemonThread.start();
try {
Thread.sleep(5000);//睡眠5秒
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("执行完毕");
MtThread thread = new MtThread("前台线程");
thread.start();
}
}
class MtThread extends Thread{
public MtThread(String name) {
super(name);
}
@Override
public void run() {
for(int i = 0 ; i < 100 ; i ++){
try {
sleep(500);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(getName() + " " + i );
}
}
}
从上面代码打印结果来看,当主线程睡眠5秒后,然后等前台线程的100个数打印完了,不管后台线程有没有执行完,这时候因为前台线程都执行完了,所以后台线程也会停止结束不再执行了。而如果后台线程先于前台线程执行完毕,前台线程会继续执行。