【问题标题】:Java - Force Close Program (with running threads)Java - 强制关闭程序(使用正在运行的线程)
【发布时间】:2015-01-07 08:38:07
【问题描述】:

一般情况
即使有(非守护程序)线程仍在运行,我也希望能够关闭我的 Java 应用程序。在Java中可能吗? (来自 C++ 世界,这似乎是一个基本要求)

原因
我正在构建一个框架来加载实现接口的外部插件。在关闭之前,我在每个插件上调用close() 函数,期望它释放所有资源并停止他的所有线程。但由于该插件是由我工作场所的几个团队构建的,我无法真正控制它们,而且不止一次有人没有关闭他的所有线程,导致应用程序卡在关闭阶段。
我想在调用每个插件close()函数后强行关闭程序,如果他们不照顾自己的资源,那是他们自己的问题......

【问题讨论】:

  • @MarounMaroun System.exit(int) 无论运行什么线程,都会关闭 JVM。
  • 请注意,这相当于在这些线程上使用SIGKILL。这是最后的努力,这些组件的所有者需要大声疾呼。
  • 告诉您的团队不允许使用非托管线程 - 他们需要通过某种 ExecutorService。这可以集中管理,例如下降时。

标签: java multithreading shutdown java-threads


【解决方案1】:

我认为与其让所有插件到处创建线程,不如在你的主程序中创建一个thread pool 并让插件有可能向它提交 Runnables 和 Callables。这将使您能够控制插件中的并发任务,即如果有 100 个插件,则不必有 100 个线程。

重新启动程序后,您可以在池上调用 shutdown,让插件任务有时间整理资源。您也可以定义超时。

【讨论】:

  • (+1) 谢谢,实际上我们几天前就开始使用这种方法了。但我无法阻止插件继续创建自己的线程...
  • 有了字节操作库就可以了!例如。面向方面的编程允许您以“new Thread()”为目标,然后您可以将其更改为引发运行时异常。您可能需要与所有团队达成一致意见。
【解决方案2】:

退出程序试试

 System.exit(0);

试试

 finalize();

如果你想释放资源

【讨论】:

    猜你喜欢
    • 2019-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-25
    • 2016-02-07
    • 2013-11-22
    • 1970-01-01
    • 2017-03-13
    相关资源
    最近更新 更多