一尘不染

什么时候应该用Java调用System.exit

java

在Java中,System.exit(0)以下代码有或没有什么区别?

public class TestExit
{      
    public static void main(String[] args)
    { 
        System.out.println("hello world");

        System.exit(0);  // is it necessary? And when it must be called? 
    }      
}

该文档说:“此方法永远不会正常返回。” 这是什么意思?


阅读 706

收藏
2020-03-06

共1个答案

一尘不染

System.exit()可以用于在程序退出之前运行关机钩子。这是处理大型程序中关闭程序的便捷方法,在该程序中,程序的所有部分都无法(也不应该)相互了解。然后,如果有人要退出,他可以简单地调用System.exit(),然后关闭挂钩(如果设置正确)将负责执行所有必要的关闭仪式,例如关闭文件,释放资源等。

“此方法永远不会正常返回。” 意味着该方法不会返回;一旦线程到达那里,它就不会回来。

退出程序的另一种(也许是更常见的)方法是简单地到达main方法的结尾。但是,如果有任何非守护进程线程在运行,它们将不会被关闭,因此JVM将不会退出。因此,如果你有任何这样的非守护程序线程,则需要一些其他方式(而不是shutdown挂钩)来关闭所有非守护程序线程并释放其他资源。如果没有其他非守护程序线程,则从返回main将关闭JVM并调用关闭钩子。

由于某种原因,关闭挂钩似乎是一种被低估和误解的机制,并且人们正在使用各种专有的自定义hacks来重新发明轮子,以退出其程序。我鼓励使用关闭钩子。无论如何,所有这些都在你将要使用的标准运行时中。

2020-03-06