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 ParentThreadI 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 MainThreadBefore using setDaemon() method false
After using setDaemon() method true
阅读更多...
解释Java中线程的生命周期。
如何创建Java线程(创建线程的Java示例)?
Java中的线程同步示例。
Java程序演示线程示例。
Java程序加入线程。
以上是 Java中的用户线程和守护程序线程之间的区别 的全部内容, 来源链接: utcz.com/z/316023.html