线程--守护线程与非守护线程

多线程–守护线程与非守护线程

什么是守护线程?

非守护线程好理解,就是程序中前端运行的线程,我个人理解为常用于处理主动事务的线程。
守护线程:顾名思义,用来守护处理事务的线程。它主要运行在程序后端,最有代表的例子GC线程,就是守护线程。

守护线程的特点

  • 守护线程运行在程序后端,随着非守护线程的结束而结束。也就是说在程序中已经没有了被守护线程后守护线程就会被终止。可以理解为,程序中没有了被守护者,守护线程也将被终止。
  • 守护线程可以通过Thread中的setDaemon方法设置,但是必须要在start方法之前设置。
  • 守护线程尽量不应该去调用系统资源,如文件,数据库等。因为它随时可能中断。
实现守护线程,验证非守护线程结束时,守护线程也中断。
/**
 * Created by 一只会飞的猪 on 2021/3/8.
 */

// 守护线程
public class DaemonThread implements Runnable{

    @Override
    public void run() {
        for (int i = 0; i <100000; i++) {
              System.out.println(Thread.currentThread().getName()+"我是守护线程,我正在运行");
        }
    }
}


// 非守护线程
class OtherThread implements Runnable{

    @Override
    public void run() {
        for (int i = 0; i <10; i++) {
            System.out.println(Thread.currentThread().getName()+"我是非守护线程,我正在运行");
        }
    }
}


class StartMain{
    public static void main(String[] args) {
           // 启动非守护线程
           new Thread(new OtherThread()).start();
           // 设置守护线程
           Thread threaddaomon = new Thread(new DaemonThread());
           threaddaomon.setDaemon(true);
           // 启动线程
            threaddaomon.start();
    }

结果:
在这里插入图片描述
可以看出来,虽然我守护线程操作了100000次,但是在非守护线程结束后,守护线程并没有继续执行。

猜你喜欢

转载自blog.csdn.net/qq_31142237/article/details/114551689