【问题标题】:Converting main() into a daemon thread possible可以将 main() 转换为守护线程
【发布时间】:2015-12-20 00:21:09
【问题描述】:

据我所知,Java 中的main() 默认情况下是非守护线程,那么是否可以将其转换为守护线程?

【问题讨论】:

  • 您是否有特定原因需要这样做?
  • 不...不完全是在考试中被问到的
  • 我会回答:(A)程序必须至少有一个非守护线程才能继续运行,并且(B)线程的身份并不重要:如果我想要一个守护线程,我可以启动一个,如果我不想让 main() 继续运行,我可以让它终止。
  • 这意味着你总是需要一个非守护线程...?事实上,这是守护进程与非守护进程的唯一意义。非守护线程使 JVM 保持活动状态,而守护线程则不会。没有其他区别。

标签: java multithreading daemon main


【解决方案1】:

如果只有守护线程在运行,那么 JVM 将关闭。如果主线程是守护线程,那么程序如果不立即关闭就无法运行。此外,您不能在线程启动后设置 daemon 属性,您不能在运行时将非守护线程更改为守护线程:

public final void setDaemon(boolean on)

将此线程标记为守护线程或用户线程。爪哇 当唯一运行的线程都是守护进程时,虚拟机退出 线程。

这个方法必须在线程启动之前调用。

【讨论】:

  • 哦!谢谢。这意味着您始终需要一个非守护线程,以便任何守护线程都可以运行。
  • @gaurav:是的,要运行程序,您必须至少有一个非守护线程。这也可能是主线程。
猜你喜欢
  • 1970-01-01
  • 2016-03-29
  • 1970-01-01
  • 1970-01-01
  • 2012-01-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-04
相关资源
最近更新 更多