【问题标题】:Does the Java main method start an infinite while-loop?Java main 方法是否启动了无限的while循环?
【发布时间】:2013-03-10 15:03:14
【问题描述】:

这个问题可能是一个非常新手的问题,但它让我很困惑。我正在研究 Java 网络,我对 main 方法的后端很好奇。

public static void main(String[] args) throws IOException 

我知道main 启动一个线程?因此,即使我有一个简单的“Helloworld”程序,在您关闭整个 IDE 或系统之前,线程仍然保持活动状态?

这是否意味着我可以在 main 方法中包含任意代码,我也想永远运行这些代码(例如,心跳传感器检查或其他一些检查)。

谢谢

【问题讨论】:

  • 除非非守护线程继续运行,否则 JVM 不会保持活动状态,除非编码器显式或隐式(例如运行 Swing GUI)创建一个或以某种方式创建一个保持主非守护线程处于活动状态(例如使用 while 循环)。
  • @HovercraftFullOfEels - 啊,我明白了。非常感谢!
  • 但请再次记住,如果启动某些库,则可以创建并运行非守护线程,例如我上面提到的 Swing 库。我敢肯定还有其他这样的例子。
  • @HovercraftFullOfEels - 好酷 - 所以启动 Swing GUI 会创建一个非守护线程。我会好好研究这个的!谢谢!
  • 非守护线程仅在您使 GUI 可见时才启动,并且必须注意仅在 Swing 事件线程上进行这些调用(通过SwingUtilities.invokeLater(...))。如果您的主要目的不是创建 Swing GUI,那么我根本不会使用它。

标签: java multithreading main-method


【解决方案1】:

没有。 JVM 启动一个线程(主线程)并在该线程内执行您的 main 方法。 main方法一返回,如果没有其他非守护线程在运行,则JVM退出。

你可以在main方法中运行一个无限循环,JVM永远不会退出(除非它被外部杀死)。

【讨论】:

  • 明白了——如果不存在非守护线程,JVM会自动退出。谢谢!
猜你喜欢
  • 2014-03-29
  • 2014-03-13
  • 1970-01-01
  • 2018-08-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多