(Daemon)后台线程/守护线程理解

后台线程,它是在后台运行的,它的任务是为其他线程提供服务,这种线程被称为“后台线程(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个数打印完了,不管后台线程有没有执行完,这时候因为前台线程都执行完了,所以后台线程也会停止结束不再执行了。而如果后台线程先于前台线程执行完毕,前台线程会继续执行。

猜你喜欢

转载自blog.csdn.net/qq_38261174/article/details/81364033