我有一个用 java 编写的系统,其中有多个不同的对象,每个对象都使用不同的资源。一些连接到 activeMQ 队列,一些连接到网络,而另一些连接到打开的文件。有些还包含正在运行的线程。
当这个系统的任何地方发生致命错误时,我需要关闭它并正确关闭所有资源并停止所有正在运行的线程。
当导致错误的对象需要启动关闭过程时,就会出现我的问题。此对象不知道其他具有打开文件的对象等。所以它基本上可以释放它的所有资源,就是这样。
我正在寻找一种干净的方法来实现这一点,而不会变得困惑并在系统中传递多个对象引用。
任何见解表示赞赏。谢谢你。
最佳答案
创建一个中央 Lifecycle
对象,应用程序中的所有其他对象都引用该对象,并且该对象又引用了所有这些其他对象。此外,这些对象中的每一个都应该实现一个公共(public)接口(interface),例如
public interface ShutdownListener {
void onShutdown();
}
当其中一个对象需要开始有序关闭时,它可以调用
lifecycle.shutdown()
,后者又可以在所有注册的对象上调用 object.onShutdown()
,以便让这些对象有机会关闭它们的资源。这基本上是 the Observer pattern 。
如果你使用依赖注入(inject)容器,比如 Spring,这种类型的东西是内置的——你的 bean 可以扩展某个接口(interface),以便在容器关闭时得到通知。
关于java - 从多个位置正确退出正在运行的程序的设计模式,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6770148/