我们有一个(非常)多线程的应用程序,它可以通过所有单元测试,但在从 IDE 或命令行运行时不会退出。这个应用程序不仅是多线程的,它还执行本机进程,并写入标准错误和标准输出。问题是应用程序会在退出时挂起。最终,我减少了应用程序,直到它与单元测试相同,它仍然会挂起,所以,我认为 JUnit 正在做一些命令行启动所没有的事情。
当我在 main(args) 的末尾调用 System.exit() 时,应用程序将退出,这最终导致我进入 System.err.close()。
当然,应用程序永远不会“打开” System.err 或 System.out。它只是写入它们,并在完成时调用flush()。我只在 64 位 Windows 上测试过,稍后我将在 Linux 上测试。JVM 是 Java(TM) SE 运行时环境(内部版本 1.6.0_24-b07)
任何想法为什么JVM不会退出?