System.exit()可以用于在程序退出之前运行关机钩子。这是处理大型程序中关闭程序的便捷方法,在该程序中,程序的所有部分都无法(也不应该)相互了解。然后,如果有人要退出,他可以简单地调用
System.exit(),然后关闭挂钩(如果设置正确)将负责执行所有必要的关闭仪式,例如关闭文件,释放资源等。
“此方法永远不会正常返回。” 意味着该方法不会返回;一旦线程到达那里,它就不会回来。
退出程序的另一种(也许是更常见的)方法是简单地到达
main方法的结尾。但是,如果有任何非守护进程线程在运行,它们将不会被关闭,因此JVM将不会退出。因此,如果你有任何这样的非守护程序线程,则需要一些其他方式(而不是shutdown挂钩)来关闭所有非守护程序线程并释放其他资源。如果没有其他非守护程序线程,则从返回
main将关闭JVM并调用关闭钩子。
由于某种原因,关闭挂钩似乎是一种被低估和误解的机制,并且人们正在使用各种专有的自定义hacks来重新发明轮子,以退出其程序。我鼓励使用关闭钩子。无论如何,所有这些都在你将要使用的标准运行时中。



