我有一个用 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/