【多线程 - 05、后台线程】

后台线程

后台线程,它是在后台运行的,它的任务是为其他线程提供服务,这种线程被称为“后台线程(Daemon Thread)”,又称为“守护线程”或“精灵线程”。JVM的垃圾回收线程就是典型的后台线程。

后台线程的特征

如果所有的前台线程都死亡了,后台线程也会自动死亡。

生成后台线程

调用Thread对象的setDaemon(true)(必须在start方法前调用)可将指定线程设置为后台线程。所有的前台线程都死亡时,后台线程也死亡,程序就退出了。

例子

public class ThreadTest {
    public static void main(String[] args) {
        DaemonThread daemonThread= new DaemonThread("后台线程");
        daemonThread.setDaemon(true);//设置为后台线程,注意必须在start前掉用,否则会报错!
        daemonThread.start();
        try {
            Thread.sleep(5000);//睡眠5秒
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("执行完毕");
        MtThread thread = new MtThread("前台线程");
        thread.start();
        //执行流程:因为主线程睡眠了5秒,所以后台线程先打印4次,然后打印执行完毕,再启动前台线程,
        //因为前台线程间隔为0.5秒,而后台线程间隔为1秒,所以前台线程会打印 前台线程 99 先执行完
        //主线程运行完,前台线程也运行完,所以后台线程会直接被终止
    }
}
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);
        }
    }
}
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) {
                e.printStackTrace();
            }
            System.out.println(getName() + "   " + i );
        }
    }
}

你可能感兴趣的:(多线程,java,开发语言,多线程)