可能重复:
What is Daemon thread in java
When are daemon threads useful?
我对Java中用户线程和守护程序线程之间的区别感到困惑。
你能告诉我:答案 0 :(得分:18)
一旦最后一个非jvm线程终止,JVM将退出。这意味着如果您创建的任何线程仍在运行,则jvm将不会关闭。 守护程序线程是不阻止JVM关闭的线程。通常你会将它们用于某些后台任务,如果用户要求它关闭,你不希望保留你的应用程序。
此外,您的问题已在此处被提问(并已回答) - What is Daemon thread in Java?
一些常见的(来自个人经验)守护程序线程的用例可能包括
答案 1 :(得分:4)
第二个问题:
当所有正常线程终止时,守护程序线程会自动终止。
您可以使用守护程序线程在应用程序中进行一些内务管理或清理。守护程序线程用于后台支持任务,仅在正常线程执行时才需要。 GC线程是守护程序线程。
答案 2 :(得分:1)
用户线程是由应用程序(用户)创建的线程,并且在大多数情况下,Java VM会创建一个守护程序线程来为用户线程提供服务。当用户线程退出时,VM区分线程,即用户或守护进程。如果用户线程退出VM,将检查是否有任何其他用户线程在运行。如果有,它将安排下一个线程(用户或守护进程)。如果没有其他用户线程在运行,并且只有守护程序线程,则该VM实例也将退出。
这两种类型的线程之间的区别很简单:如果Java运行时确定应用程序中运行的唯一线程是守护程序线程(即,没有用户线程存在),Java运行时会立即关闭应用程序,有效地阻止所有守护程序线程死在他们的轨道上。为了使应用程序继续运行,它必须始终至少有一个实时用户线程。在所有其他方面,Java运行时以完全相同的方式处理守护程序线程和用户线程。