Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/370.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,我的程序相当大,而且因为它倾向于随机执行进程,有时会卡住,永远循环。如果我手动强制停止并重新启动程序,通常(大约85%)的时间,程序会完成所有命令并终止 如果Java程序卡住,有没有办法让它在20秒后重新启动?我尝试使用系统时间来解决这个问题,但问题是如果我的程序陷入for循环,它在下一次迭代之前不会更新系统时间。这不是解决这个问题的正确方法!您需要找出程序陷入无限循环的原因,然后修复它。“好吧,让我们再试一次”不是解决bug的正确方法-你不知道这个bug可能会有什么其他影响。您很可能也得到了不

我的程序相当大,而且因为它倾向于随机执行进程,有时会卡住,永远循环。如果我手动强制停止并重新启动程序,通常(大约85%)的时间,程序会完成所有命令并终止


如果Java程序卡住,有没有办法让它在20秒后重新启动?我尝试使用系统时间来解决这个问题,但问题是如果我的程序陷入for循环,它在下一次迭代之前不会更新系统时间。

这不是解决这个问题的正确方法!您需要找出程序陷入无限循环的原因,然后修复它。“好吧,让我们再试一次”不是解决bug的正确方法-你不知道这个bug可能会有什么其他影响。您很可能也得到了不正确的输出。调试程序,不要绕过缺陷


您可以使用一些外部程序来启动java程序,当它卡住时在20秒后将其杀死,然后再次启动,但这不是解决问题的正确方法。

您的程序不应该永远卡住并循环,请修复此问题。但如果这是不可能的,并且您仍然希望在永久循环后“重新启动”程序,我建议您这样的解决方案:


创建将成为主管的主程序。导演将被任命为创建线程。线程将执行主算法,这可能需要很多时间。主管将等待一段时间,这将是最终参数。此参数有助于控制器识别线程是否处于永久循环中(耗时太长)。当永久循环被识别时,它将终止线程并启动新的线程(重新启动)。

查看ExecutorServices,以获得一种机制,允许您调用一段代码,并在未在预期时间内完成时接收超时。然后,你可以根据自己的意愿行事


另一个不错的工具是使用JDK中的jvisualvm在循环时附加到程序。然后,您可以请求一个线程转储,并使用它来了解它在做什么。

考虑到解决这个问题意味着解决停止问题,我们可以相当肯定整个方法注定失败;)


很明显,您可以使用计时器在指定的时间后终止程序,但实际上-查找程序中的错误。

当程序包含如此严重的问题时重新启动程序并不能解决问题。找到根本原因。你最好的选择是找到它的原因。我建议添加一些调试消息,当它被卡住时,查看最后一条调试消息,这会让您知道它失败的地方。添加系统状态参数可能会指出确切的问题(A+1,因为我认为当前的答案和评论非常相关,应该有更多的读者)。解决这个问题的另一个策略是开始编写单元测试。当您的项目变得相当大时,这一点尤为重要。当您将项目搁置一段时间,并尝试重新启动它,并找出为什么您会这样做时,您会很感激使用测试来表达您的意图。另一种方法是使用调试器调试您的程序。如果需要20秒,你所需要做的就是在这段时间后暂停程序,看看它在哪里以及为什么会陷入循环。