Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/402.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用文件的存在优雅地关闭程序-好还是坏?_Java - Fatal编程技术网

Java 使用文件的存在优雅地关闭程序-好还是坏?

Java 使用文件的存在优雅地关闭程序-好还是坏?,java,Java,假设我有一个守护程序风格的Java程序(一个永远重复执行代码块直到终止的程序)。我有代码定期检查文件的存在,如果存在,删除文件并优雅地关闭程序 要关闭程序,而不是killing其进程,我只需触摸文件,等待程序关闭(并等待文件消失) 这是好的做法还是坏的做法?原因是什么 还有什么方法可以实现Java程序的正常关闭 注意:我已经看到了,但是没有一个答案满足上述问题。如果进程崩溃怎么办?现在该文件已存在,程序将不再启动? 我以前见过这种机制,但这始终是一个弱点。您考虑过使用信号吗?“kill”是进

假设我有一个守护程序风格的Java程序(一个永远重复执行代码块直到终止的程序)。我有代码定期检查文件的存在,如果存在,删除文件并优雅地关闭程序

要关闭程序,而不是
kill
ing其进程,我只需
触摸文件,等待程序关闭(并等待文件消失)

  • 这是好的做法还是坏的做法?原因是什么
  • 还有什么方法可以实现Java程序的正常关闭

注意:我已经看到了,但是没有一个答案满足上述问题。

如果进程崩溃怎么办?现在该文件已存在,程序将不再启动?

我以前见过这种机制,但这始终是一个弱点。

您考虑过使用信号吗?“kill”是进程的一个信号,如果您编写信号处理程序,您可以使用它们与进程通信。有关详细信息,请参阅此链接:。在我看来,您在问题中所链接的问题确实回答了您关于如何优雅地关闭程序的问题。
杀死
关闭进程并没有什么不好的,它更像是:“您能关闭自己吗?”。(-9不好!)我看不出你的问题与链接问题有什么不同。@Ishtar链接问题中有很多答案,但没有人谈论实现这一点的每种方法的优缺点。只有一种方法可以优雅地退出,那就是在终止前清理:addShutdownhook。如果文件存在时必须退出,请务必调用System.exit。程序启动时,可以删除该文件。或者,如果程序设计为“使用”该文件,则在第一次启动失败时,该文件将被删除,因此第二次启动将正常进行。@ADTC理论上很不错,但通常这些东西被设计为一种粗糙的方法,用于锁定系统,防止多个实例运行。最好只是听一个杀戮信号。