当前位置: 首页 > 面试题库 >

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

萧晔
2023-03-14
问题内容

在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? 
    }      
}

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


问题答案:

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

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

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

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



 类似资料:
  • 问题内容: 我知道他们两个都禁用了Nagle的算法。 我什么时候应该/不应该使用它们中的每一个? 问题答案: 首先,不是所有人都禁用Nagle的算法。 Nagle的算法用于减少有线中更多的小型网络数据包。该算法是:如果数据小于限制(通常是MSS),请等待直到收到先前发送的数据包的ACK,同时累积用户的数据。然后发送累积的数据。 这将对telnet等应用程序有所帮​​助。但是,在发送流数据时,等待A

  • 问题内容: 在该类中,有两个字符串,和。 有什么不同?我什么时候应该使用另一个? 问题答案: 如果你的意思是和则: 用于在文件路径列表中分隔各个文件路径。考虑在上的环境变量。您使用a分隔文件路径,因此在上将是;。 是或用于拆分到特定文件的路径。例如在上,或

  • 问题内容: 我正在使用’multiprocess.Pool.imap_unordered’如下 我需要打电话或之后的for循环? 问题答案: 不,您没有,但是如果您不再使用游泳池,那可能是个好主意。 Tim Peters在此SO帖子中致电或致电的理由很明确: 至于Pool.close(),您应该在永远不会将更多工作提交给Pool实例的情况下(且仅在)进行调用。因此,通常在主程序的可并行化部分完成时

  • 问题内容: 在集成我以前从未使用过的Django应用程序时,我发现了用于定义类中函数的两种不同方式。作者似乎非常有意地使用了它们。第一个是我自己经常使用的: 另一个是我不使用的,主要是因为我不知道何时使用它,以及什么用途: 在Python文档中,装饰器的解释如下: 类方法将类作为隐式第一个参数接收,就像实例方法接收实例一样。 所以我想指的是自己(而不是实例)。我不完全理解为什么会这样,因为我总是可

  • 问题内容: 我看过各种文章,但我仍然不知道为什么不应该使用它。请让我知道您的想法。 问题答案: 我发现有必要在错误的设计中使用instanceof提示。可以肯定的是,将会出现一个大型,复杂的开关风格的构造。在我看到的其他大多数情况下,我们应该使用多态而不是instanceof。请参阅策略模式。(相关的使用示例) 我唯一需要使用的是实现时。

  • 问题内容: 我在阅读《 Swift编程语言》指南 时遇到了一个叫做的函数,但我仍然想知道为什么以及何时需要实现它,因为我们实际上不需要管理内存。 问题答案: 不需要实现该方法,但是如果需要在取消分配对象之前进行一些操作或清理,则可以使用它。 在苹果的文档包括例如: 因此,无论何时将玩家从游戏中移除,其硬币都会退还至银行。