【问题标题】:Java: Prepare for forced shutdownJava:准备强制关闭
【发布时间】:2019-03-31 20:56:37
【问题描述】:

我正在用 Java 制作一个应用程序,我希望始终以最少的保存操作将数据保存到文件中。换句话说,每当应用程序关闭或抛出异常时,它都会首先尝试保存。一个问题:电源按钮。当用户按住计算机的电源按钮时,它会强制操作系统关闭。现在,我究竟如何让 Java 检测到即将到来的关闭,或者 JVM 会先关闭系统(因此调用关闭挂钩)?

【问题讨论】:

  • 那个按钮在硬件级别上运行,所以...不。
  • @JanDvorak 好的。感谢您的评论!
  • 如果操作系统在应用程序仍在运行时正常关闭,您实际上可以使用关闭挂钩。看看shutdown hooks。但是,就像@Jan 说的那样,你无能为力。
  • 这是一种可以为您的应用程序设置关闭挂钩的方法:Runtime.getRuntime().addShutdownHook(new Thread() { ... } 。在“关机”的情况下,它不会被触发,所以我建议您使用一些调度程序定期保存您的数据。
  • 您可能不喜欢的另一件事:杀死应用程序也不会触发关闭挂钩。但至少磁盘写入缓冲区中的数据不会丢失。不过,您未刷新的应用程序级缓冲区是。

标签: java shutdown shutdown-hook


【解决方案1】:

我在这里总结一下大部分已经写在 cmets 中的内容。

当用户按下电源按钮超过 4 秒时,通常会发生这种情况,即 bios 将切断主板和所有外围设备的电源。

软件(操作系统或用户软件)无法对这种情况做出反应。

可能发生的情况是硬盘驱动器会刷新任何硬件缓冲区并将磁头停在安全位置以便运输,但也可能不会发生,程序员无论如何也无法控制。

使用shutdown hooks 对定期系统关闭可能有什么反应

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-06
    • 2013-03-25
    • 2015-02-18
    • 2015-04-03
    相关资源
    最近更新 更多