java - 从多个位置正确退出正在运行的程序的设计模式

标签 java design-patterns shutdown

我有一个用 java 编写的系统,其中有多个不同的对象,每个对象使用不同的资源。有些连接到 activeMQ 队列,有些连接网络,有些打开文件。有些还包含正在运行的线程。

当这个系统的任何地方发生 fatal error 时,我需要关闭它并正确关闭所有资源并停止所有正在运行的线程。

当导致错误的对象需要启动关闭进程时,我的问题就出现了。该对象不知 Prop 有打开文件等的其他对象。所以它基本上可以释放它的所有资源,就是这样。

我正在寻找一种干净的方法来实现这一目标,而不会造成困惑并在系统中传递多个对象引用。

任何见解都值得赞赏。谢谢。

最佳答案

创建一个中央 Lifecycle 对象,应用程序中的所有其他对象都引用该对象,而该对象又引用所有这些其他对象。此外,这些对象中的每一个都应该实现一个通用接口(interface),例如

public interface ShutdownListener {
   void onShutdown();
}

当其中一个对象需要开始有序关闭时,它可以调用 lifecycle.shutdown(),后者又可以对所有对象调用 object.onShutdown()向其注册的对象,以便让这些对象有机会关闭其资源。

这基本上是 the Observer pattern .

如果您使用诸如 Spring 之类的依赖注入(inject)容器,这种类型的东西是内置的 - 您的 bean 可以扩展特定接口(interface)以在容器关闭时收到通知。

关于java - 从多个位置正确退出正在运行的程序的设计模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6770148/

相关文章:

java - SwingWorker 在(不成功的)JLabel 图标更新时锁定 GUI

java - 如何使用此自定义 ExecutorService 使关闭正常工作?

java - Java中的单例模式实现

c++ - 控制台和 GUI 的通用设计

tomcat - 如果我们把tomcat的关闭端口改成-1会怎么样呢?

sockets - 关闭/关闭对 TCP 接收缓冲区的影响

java - ExecutorService 在 Finalize() 中关闭

java - JDBC MS SQL Server Kerberos 身份验证

java - 如何通过在java中对每个数字进行乘积来从一组数字中找到单个数字

c++ - 抽象跨平台实现的常用习语是什么?