Java中的用户线程和守护程序线程之间的区别

1)Java中的用户线程

  • 用户线程也称为非守护线程。

  • 用户线程是在前台运行的线程。

  • 如果是用户线程,则在所有用户线程完成后,JVM会退出应用程序。它并不关心守护进程线程是否已完成。(即,JVM将关闭,无论任何守护程序线程的状态如何)。

  • 用户线程由用户创建。

  • 一旦用户线程完成,JVM将不会优先选择任何守护程序线程。

示例

我们可以使用setDaemon(boolean)方法将用户线程作为守护程序线程。例如:在此示例中,我们通过使用isDaemon()方法返回true来检查线程类型(用户线程或守护程序),这意味着线程是守护程序,否则线程是非守护程序或用户。

class ChildThread extends Thread{

public void run(){

System.out.println("I am in ChildThread");

}

}

class ParentThread{

public static void main(String[] args){

ChildThread ct = new ChildThread();

ct.start();

System.out.println("I am in main thread");

System.out.println("Type of ChildThread: return true : Daemon and return false : Non-daemon " + "  " + ct.isDaemon());

System.out.println("Type of ParentThread: return true : Daemon and return false : Non-daemon " + "  "  + Thread.currentThread().isDaemon());

}

}

输出结果

D:\Java Articles>java ParentThread

I am in main thread

Type of ChildThread: return true : Daemon and return false : Non-daemon   false

Type of ParentThread: return true : Daemon and return false : Non-daemon   false

I am in ChildThread

2)Java中的守护进程线程

  • 守护程序线程是服务线程。

  • 守护程序线程是在后台运行的线程。

  • 在使用Daemon的情况下,直到所有用户线程都完成后,Thread JVM才会退出应用程序。它并不关心守护进程线程是否已完成。(即,JVM将关闭,无论任何守护程序线程的状态如何)。

  • 非守护程序线程通过使用setDaemon(boolean)方法作为主线程以外的守护程序(如果设置为true,则布尔值可以为true或false,这表示我们将非守护程序线程设置为守护程序;如果设置为false,则意味着我们设置了守护程序线程作为非守护进程)。

  • 我们可以使用isDaemon()方法检查线程是守护程序还是非守护程序。

  • 一旦用户线程完成,JVM将不会优先选择任何守护程序线程。

  • 守护程序线程在应用程序后面运行,并为非守护程序线程提供服务。

  • 守护程序线程:时钟处理程序线程,屏幕更新程序线程,垃圾收集器线程等。

示例

在此示例中,我们使用setDeamon(布尔值)将非守护程序线程作为守护程序,但是我们无法更改主线程的行为。

class ChildThread extends Thread{

public void run(){

System.out.println("child thread is a non-daemon thread");

}

}

class MainThread{

public static void main(String[] args){

ChildThread ct = new ChildThread();

System.out.println("Before using setDaemon() method "+ "  " + ct.isDaemon());

ct.setDaemon(true);

System.out.println("After using setDaemon() method "+ "  " + ct.isDaemon());

}

}

输出结果

D:\Java Articles>java MainThread

Before using setDaemon() method   false

After using setDaemon() method   true

阅读更多...

  1. 解释Java中线程的生命周期。

  2. 如何创建Java线程(创建线程的Java示例)?

  3. Java中的线程同步示例。

  4. Java程序演示线程示例。

  5. Java程序加入线程。

以上是 Java中的用户线程和守护程序线程之间的区别 的全部内容, 来源链接: utcz.com/z/316023.html

回到顶部