我在我的多线程程序中调用了 System.exit(1)
。然而,有时程序不是返回代码 1,而是返回代码 0 退出。我没有任何其他调用 System.exit()
并且我确信该程序没有干净地退出。可能是什么原因,我该如何避免?
请注意,该错误是间歇性的,我无法在单线程程序中重现相同的行为。
最佳答案
修改您的设计以执行更受控的关闭。
不应期望在具有多线程的应用程序中调用 System.exit()
会导致程序完全退出。
与其调用 System.exit()
退出程序,不如向每个移动组件发送关闭消息并使用 Thread.join()
恢复任何线程你创造了。您的应用程序应该能够以这种方式很好地关闭所有部分。主线程中的最后一个命令应该是返回您的退出代码。如果您只是调用 System.exit()
,您会将所有这些关闭细节留给 JVM,JVM 将采取严厉的方法并当场杀死所有内容。
你用过 Runtime.getRuntime.addShutdownHook()
吗?调用 System.exit()
将调用可能已安装的任何关闭 Hook ,这可能会更改退出代码。
关于java - System.exit(1) 在多线程程序中存在,返回码为 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4625660/