举报投诉联系我们 手机版 热门标签 名动网
您的位置:名动网 > java守护线程和普通线程的区别 Java 守护线程

java守护线程和普通线程的区别 Java 守护线程

2023-03-06 20:20 Java教程

java守护线程和普通线程的区别 Java 守护线程

java守护线程和普通线程的区别

Java守护线程和普通线程是Java多线程的两个重要概念,它们之间有很多不同之处。

首先,它们的启动方式不同。普通线程是由Thread.start()方法来启动的,而守护线程是由Thread.setDaemon(true)来设置为守护进程,然后再调用Thread.start()方法来启动。

其次,它们的优先级也不一样。普通线程的优先级默认为5,而守护进程的优先级默认为1。

此外,它们在JVM中的存在也有所不同。当JVM中只剩下守护进程时,JVM将会退出;而当JVM中只剩下普通进行时,JVM将不会退出。

public class DaemonThreadTest {

    public static void main(String[] args) {

        Thread thread = new Thread(new Runnable() {

            @Override

            public void run() {

                while (true) {

                    System.out.println("I am a daemon thread");

                }

            }

        });

        // 设置为守护进行

        thread.setDaemon(true);  // 将该进行设为守护进行 

        thread.start();  // 启动该进行 

    }
}

Java 守护线程

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();
      }
    }
  }
}

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


例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();
      }
    }
  }
}

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



阅读全文
以上是名动网为你收集整理的java守护线程和普通线程的区别 Java 守护线程全部内容。
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。
相关文章
© 2024 名动网 mdwl.vip 版权所有 联系我们