java线程-守护进程线程?
作为守护进程处理的线程会发生什么情况 这对线程有什么影响java线程-守护进程线程?,java,multithreading,Java,Multithreading,作为守护进程处理的线程会发生什么情况 这对线程有什么影响 线程上的“can和can't”是什么?守护进程线程和非守护进程线程之间的主要区别在于,当所有非守护进程线程都已终止时,程序将终止。因此,如果您有一个活动的守护进程线程并结束第一个线程,那么程序将终止。因此,您希望在程序运行期间使用守护进程线程来执行您希望继续执行的操作。a守护进程线程是一个线程,它不会阻止JVM在程序完成但线程仍在运行时退出守护进程线程是在与守护进程线程相同的进程中运行的其他线程的服务提供程序 例如垃圾收集 通过对线程对象
线程上的“can和can't”是什么?守护进程线程和非守护进程线程之间的主要区别在于,当所有非守护进程线程都已终止时,程序将终止。因此,如果您有一个活动的守护进程线程并结束第一个线程,那么程序将终止。因此,您希望在程序运行期间使用守护进程线程来执行您希望继续执行的操作。a守护进程线程是一个线程,它不会阻止JVM在程序完成但线程仍在运行时退出守护进程线程是在与守护进程线程相同的进程中运行的其他线程的服务提供程序 例如垃圾收集 通过对线程对象调用
setDaemon(true)
,可以显式地将用户线程创建的线程指定为守护进程线程
供参考 请注意,该方法必须 在线程的 方法被调用 开始执行(即其 方法已被调用)其守护进程 无法更改状态。断定 如果线程是守护进程线程,请使用 访问器方法 作为守护进程处理的线程会发生什么情况 标志
isDaemon()
将设置为true
不会发生的是;此线程不会阻止应用程序退出
这对线程有什么影响
除非查看isDaemon()方法,否则什么都没有
线上的"能和不能"是什么?
您可以在守护进程线程中执行任何您可以在非守护进程线程中执行的操作。您不能保证线程将完成。Java中守护进程线程和非守护进程线程的区别: 1) JVM在存在之前不会等待任何守护进程线程完成
2) 当JVM终止时,守护进程线程与用户线程的处理方式不同,最后不调用块,堆栈没有损坏,JVM只是退出。守护进程线程不会阻止程序结束 例如: Java应用程序从一个线程开始,即运行
main
方法的“main”线程。这是一个常规(非守护进程)线程。现在再想象一下,程序启动另一个线程,该线程位于一个循环中,正在执行某些操作。如果新线程是一个常规(非守护进程)线程,它将阻止程序在“main”结束时完成,并永远继续运行
class HelloThread extends Thread
{
public void run()
{
for ( ; ; )
{
System.out.println("hello");
sleep(1000);
}
}
}
public class RegularThreader
{
public static void main(String[] args)
{
Thread hello = new HelloThread();
hello.start();
System.out.println("Sorry, I must be leaving");
}
}
现在,这并不总是必需的。有时,您希望在程序完成时结束此“后台”处理。为此,可以将线程标记为守护进程线程。守护进程线程不阻止程序结束,而是在主线程停止时停止
public class DaemonThreader
{
public static void main(String[] args)
{
Thread hello = new HelloThread();
hello.setDaemon(true);
hello.start();
System.out.println("Sorry, I must be leaving");
}
}
试着运行上面两个不同的类,看看
输出是不同的。
守护进程线程的一个典型示例是许多Java虚拟机中的垃圾收集器线程。它需要在任何其他线程运行时连续运行,但不应阻止程序退出。当程序退出时,不再需要垃圾收集器