java中的守护线程

什么是守护线程

 我们平时创建的线程都默认为一般线程(用户线程),只有显著的设置某一线程为守护线程时才会有别于默认创建的线程。

 守护线程的唯一用途就是为其它线程提供服务。比如说java中的垃圾回收线程就是一个守护线程;或者说一个计数器也是一个守护线程。

 当程序运行时只剩一个守护线程时,程序就会停止运行或者说java虚拟机就会退出。因为如果只剩下守护线程时,程序就没有在运行的必要了。

创建一个守护线程

代码
public class Demo{

    public static void main(String[] args) {

        Thread thread = new Thread(new Runnable() {
            @Override
            public void run() {
                while (true){
                    System.out.println("我是守护线程,有其它线程存在我就不停止");
                }
            }
        });
	// 设置该线程为守护线程
        thread.setDaemon(true);
        thread.start();
	
	// 运行用户线程
        new Thread(new ThreadDemo()).start();

    }
}

class ThreadDemo implements Runnable{

    @Override
    public void run() {
        for (int i = 0; i <= 10 ; i++){
            System.out.println(i);
        }
    }
}
结果

运行结果.png

 代码中我们通过一个内部类创建一个线程,通过thread.setDaemon(true);设置该线程为守护线程。然我我们又创建了一个用户线程,刚刚我们就提到,守护线程只有在非守护线程结束时才会想到停止。

 通过我们的运行截图可以看到,当第二个线程(用户线程)结束时,第一个线程(守护线程)也很快的就会结束了。

其它

  • 只有在线程运行前设置其为守护线程才有效果,负责会报错
  • 如果在一个守护线程中产生的另一个线程,那这个线程也是守护线程

评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×