一般
我希望能够关闭我的Java应用程序,即使有(非守护程序)线程仍在运行。在Java中有可能吗? (来自C ++世界,这似乎是一个基本要求)
原因
我正在构建一个框架来加载实现接口的外部插件。在关闭之前,我在每个插件上调用close()
函数,期望它释放所有资源并停止所有线程。但是由于插件是由我工作场所的几个团队构建的,我无法控制它们,并且不止一次有人没有关闭所有线程而导致应用程序停留在关闭阶段。
在我调用每个插件close()
函数后,我想强行关闭程序,如果他们没有处理他们的资源,那就是他们自己的问题......
答案 0 :(得分:3)
我认为不是让所有插件都在整个地方创建线程,最好在主程序中创建thread pool并让插件可以向其提交Runnables和Callables。这将使您可以控制插件中的并发任务,即如果有100个插件,则不必有100个线程。
重新启动程序后,您可以在池上调用shutdown,为插件任务提供时间来整理资源。您也可以定义超时。
答案 1 :(得分:1)
退出程序试试
System.exit(0);
并尝试
finalize();
如果你想释放资源