什么';java中用户线程和守护进程线程的区别是什么?

什么';java中用户线程和守护进程线程的区别是什么?,java,thread-safety,jvm,Java,Thread Safety,Jvm,可能重复: 我对Java中用户线程和守护进程线程之间的区别感到困惑 你能告诉我: Java中的用户线程和守护进程线程有什么区别 在哪种情况下将使用守护进程线程?你能给我举几个例子吗 一旦最后一个非JVM线程终止,JVM将退出。这意味着,如果您创建的任何线程仍在运行,jvm将不会关闭。 守护进程线程是不阻止JVM关闭的线程。通常情况下,您会将它们用于一些后台任务,如果用户请求关闭应用程序,您不想让应用程序继续运行 此外,您的问题已在此处提出(并得到回答)—— 守护进程线程的一些常见(个人经验)

可能重复:

我对Java中用户线程和守护进程线程之间的区别感到困惑

你能告诉我:

  • Java中的用户线程和守护进程线程有什么区别
  • 在哪种情况下将使用守护进程线程?你能给我举几个例子吗

  • 一旦最后一个非JVM线程终止,JVM将退出。这意味着,如果您创建的任何线程仍在运行,jvm将不会关闭。 守护进程线程是不阻止JVM关闭的线程。通常情况下,您会将它们用于一些后台任务,如果用户请求关闭应用程序,您不想让应用程序继续运行

    此外,您的问题已在此处提出(并得到回答)——

    守护进程线程的一些常见(个人经验)用例可能包括

    • 轮询远程系统状态更改的后台线程
    • 后台工作线程(如发送电子邮件通知、snmp等)
    • 用于执行计划维护的自定义计时器线程

    • 第二个问题:

      当所有正常线程都已终止时,守护进程线程将自动终止


      您可以使用守护进程线程在应用程序中执行一些内务管理或清理。守护进程线程用于后台支持任务,仅在正常线程执行时才需要GC线程是守护进程线程。

      用户线程是由应用程序(用户)创建的线程,在大多数情况下,守护进程线程是由Java VM创建的,用于服务于用户线程。当用户线程退出时,VM区分作为用户线程或守护进程的线程。如果用户线程退出,VM将检查是否有其他用户线程正在运行。如果有,它将调度下一个线程(用户或守护进程)。如果没有其他用户线程在运行,并且只有守护进程线程在运行,那么该VM实例也将退出


      这两种线程之间的区别很简单:如果Java运行时确定应用程序中运行的线程只有守护进程线程(即,不存在任何用户线程),Java运行时会立即关闭应用程序,从而有效地停止所有死在其轨道上的守护进程线程。为了让应用程序继续运行,它必须始终至少有一个活动用户线程。在所有其他方面,Java运行时都以完全相同的方式处理守护进程线程和用户线程。

      守护进程线程:谢谢,但是你能回答问题2吗?希望我已经回答了你的第二个问题。它只是线程上的一个标志,上面写着:为了我,不要继续运行。您可以使用这样的线程进行监视,例如检查其他线程是否被阻止。若并没有其他线程在运行,那个么做这个检查是并没有意义的。谢谢,但你们的主要问题是问题2@lichengwu-已编辑的回答,包括我使用了哪些内容来解释为什么发生GC时我的程序停止,以及为什么系统仅在内存不足时才告诉我GC发生?这是一个单独的候选问题。不管怎么回答你的问题。GC浏览所有活动对象,因此当GC运行时,应用程序执行通常处于暂停状态,以确保它能够以一致的状态查找对象。若应用程序和GC一起运行,那个么对象可能处于一致状态。是的,通常当JVM感觉需要更多的可用内存时,GC就会发生。因此,当GC开始运行时,应用程序线程会处于睡眠模式。当您的GC线程仅在其他线程处于睡眠状态时才处于活动状态,这意味着您不需要GC线程。这根本不是多线程。线程是并发运行nint进程所必需的。我的意思是GC是一个糟糕的守护进程示例。你可以优化它。不要同意你的评论。。可能您可以问一个单独的问题。当调用
      System.exit(0)
      时,主线程和用户线程将停止,但是JVM将如何处理deamon线程?忽略?停止还是杀人?@lichengwu-system.exit()将阻止一切正常运行。区别在于更优雅的退出,就像main()方法结束时发生的情况一样。@radai+1。当JVM退出时,JVM会先停止用户线程,然后停止执事线程吗?@lichengwu-我认为他们不会对顺序做出任何保证。如果您打算编写自己的关机逻辑,请在正确关机之前不要使用System.exit()everything@radaijvm停止不仅包括system.exit。您知道jvm在关闭jvm时是否会按顺序停止用户线程和deamon线程吗?