2021-04-18 11:25  阅读(93)
文章分类:Java 基础教程 文章标签:JavaJava 教程
©  原文作者:w3cschool 原文地址:https://www.w3cschool.cn/java/java-thread-multiple.html

Java线程教程 - Java守护线程

线程可以是守护线程或用户线程。

守护线程是服务提供者线程。

当JVM检测到应用程序中的所有线程都只是守护线程时,它将退出应用程序。

我们可以通过使用setDaemon()方法通过传递true作为参数,使线程成为一个守护线程。

我们必须在启动线程之前调用一个线程的setDaemon()方法。否则,一个java.lang。抛出IllegalThreadStateException。

我们可以使用isDaemon()方法来检查线程是否是守护线程。

创建线程时,其守护程序属性与创建线程的线程相同。

例子

以下代码创建一个线程并将线程设置为守护线程。

    public class Main {
      public static void main(String[] args) {
        Thread t = new Thread(Main::print);
        t.setDaemon(true);
        t.start();
        System.out.println("Exiting main  method");
      }
    
      public static void print() {
        int counter = 1;
        while (true) {
          try {
            System.out.println("Counter:" + counter++);
            Thread.sleep(2000); // sleep for 2 seconds
          } catch (InterruptedException e) {
            e.printStackTrace();
          }
        }
      }
    }
    

上面的代码生成以下结果。

20210418112112_1.png

例2

以下代码将线程设置为非守护线程。由于这个程序有一个非守护线程,JVM将继续运行应用程序,即使在main()方法完成后。

您必须强制停止此应用程序,因为线程在无限循环中运行。

    public class Main {
      public static void main(String[] args) {
        Thread t = new Thread(Main::print);
        t.setDaemon(false);
        t.start();
        System.out.println("Exiting main  method");
      }
      public static void print() {
        int counter = 1;
        while (true) {
          try {
            System.out.println("Counter:" + counter++);
            Thread.sleep(2000); // sleep for 2 seconds
          } catch (InterruptedException e) {
            e.printStackTrace();
          }
        }
      }
    }
    

上面的代码生成以下结果。

2021041811213_2.png

点赞(0)
版权归原创作者所有,任何形式转载请联系作者; Java 技术驿站 >> Java 守护线程
上一篇
Java 线程优先级
下一篇
Java 线程中断