代码之家  ›  专栏  ›  技术社区  ›  Ariod

处理异常Java程序出口

  •  3
  • Ariod  · 技术社区  · 15 年前

    6 回复  |  直到 15 年前
        1
  •  3
  •   Michael Myers KitsuneYMG    15 年前

    如果外部的东西杀死了你的程序,你对此无能为力。很明显他们想阻止它,那么你怎么能阻止他们呢?

    shutdown hook ,但Javadocs声明:

    在极少数情况下,虚拟机可能会 中止 SIGKILL 在Unix或 TerminateProcess call 如果虚拟机中止,则无法保证是否会运行任何关闭挂钩。

    (强调矿山)

        2
  •  3
  •   sralmai    11 年前

    您应该看看Java的Runtime.addShutdownHook()方法( http://java.sun.com/javase/6/docs/api/java/lang/Runtime.html#addShutdownHook(java.lang.Thread) )。它允许您添加一个钩子,当虚拟机终止时将调用该钩子。您可以使用它来调用清理例程。

        3
  •  2
  •   Quassnoi    15 年前

    杀死一个程序最终会导致一个超时 TCP 从您的程序流到您的 [Oracle|SQL Server|MySQL|PostgreSQL] 服务器

        4
  •  2
  •   Avi    15 年前
    1. 您不需要在应用程序关闭时调用connection.close(),因为操作系统会自动关闭所有打开的文件。
    2. 在任何情况下,您都可以注册 shutdown-hooks ,以执行所需的任何清理(同样,将在正常关机情况下运行,而不是中止)。
        5
  •  1
  •   Community basarat    7 年前

    当你真的被杀的时候( kill -9 在UNIX上),您无法对此进行任何操作。

    finally SO: In Java, is the “finally” block guaranteed to be called (in the main method)? 详情请参阅。

        6
  •  1
  •   Chase Seibert    15 年前

    某种程度的异常终止是不可避免的。您将如何捕获服务器上的电源线被拉的事件?