首页 > 解决方案 > 在 Java 中阻塞 main 方法总是不好的吗?

问题描述

我们有一个持续运行的应用程序。除了初始化一些后台线程之外,main 方法中没有任何事情发生。后台线程在套接字事件发生时对其进行处理。除了处理套接字事件的时间外,应用程序仍处于空闲状态。

主要的

while (true); // block main thread from exiting. Otherwise, periodic GC calls kills the app.

由于我的应用程序的主要功能是处理事件,因此没有前台任务。在我的情况下阻塞主线程是否不好?还有哪些其他替代品?

标签: javamultithreadinggarbage-collection

解决方案


主线程只是第一个线程,因此与任何其他线程没有什么不同。如果你阻塞它,就意味着浪费了这个线程占用的内存(大约1MB),仅此而已。所以如果这个线程没有工作,我会从 main 方法返回。

我注意到您的代码中有一条注释:阻止主线程退出。否则,定期 GC 调用会杀死应用程序。评论是错误的。GC 调用不能杀死应用程序。我怀疑其他线程是以守护程序模式启动的,因此封闭进程不会等待它们完成。

如果您更详细地描述整个过程何时必须结束,我们可以提出更明智的建议。


推荐阅读