java - System.exit(1) 在多线程程序中存在,返回码为 0

标签 java multithreading exit java-6

我在我的多线程程序中调用了 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/

相关文章:

java - 如果我的 Servlet 实例变量是 StringBuffer 类型,它是线程安全的吗?

node.js - Node 中的 process.exitcode 和 process.exit() 有什么区别吗?

java - 从一侧进入,从另一侧退出

ruby - 退出ruby对象中的所有方法

java - ScheduledThreadPoolExecutor 的线程池大小是否持续增长?

java - 如何将变量的值分配给线程以及何时应该这样做?

java - 为什么哈希函数不使用随机性?

java - 如何处理 Netty 中缓慢的读取器?

java - 为树状数据寻找更好的结构

java - 注册 spring-boot-admin-client 错误