将java maven项目中编写的模拟程序修改为可重启程序
我有一个用java-maven编写的模拟程序,我在集群机器上运行它,但是有一个时间限制。因此,理想情况下,我希望修改代码使其可重新启动(即,它能够在某一点停止并从该点重新启动),我以前从未这样做过,有人能给我一些提示,我应该遵循什么过程,这将不胜感激 我想到的第一件事是序列化对象模型。我的意思是,当你们开始你们的模拟时,首先,它寻找一个特殊的文件,它保存着你们整个对象树的序列化形式。如果有,它将反序列化它,并从那里继续。如果不是像往常一样启动,在停止之前,它会再次序列化其状态,写入该特殊文件,然后退出将java maven项目中编写的模拟程序修改为可重启程序,java,performance,Java,Performance,我有一个用java-maven编写的模拟程序,我在集群机器上运行它,但是有一个时间限制。因此,理想情况下,我希望修改代码使其可重新启动(即,它能够在某一点停止并从该点重新启动),我以前从未这样做过,有人能给我一些提示,我应该遵循什么过程,这将不胜感激 我想到的第一件事是序列化对象模型。我的意思是,当你们开始你们的模拟时,首先,它寻找一个特殊的文件,它保存着你们整个对象树的序列化形式。如果有,它将反序列化它,并从那里继续。如果不是像往常一样启动,在停止之前,它会再次序列化其状态,写入该特殊文件,然
我希望这是有意义的。在Java中,您可以注册一个关机钩子,在JVM即将退出时运行,可以通过“脱离”主方法正常退出,也可以通过一些外部信号(如
^C
或操作系统重新启动事件)退出
Runtime.getRuntime().addShutdownHook(new Thread() {
public void run() {
// Save program state for later
}
});
好的,我已经提供了一个很好的答案,我在这个答案被接受后回答
我想到的第一件事是序列化对象模型。我 意思是,当你开始你的模拟,首先,它寻找一个 特殊文件,它保存整个对象树的序列化形式。 如果有,它将反序列化它,并从那里继续。如果不是 像往常一样启动,在停止之前,它再次序列化其状态, 写入那个特殊文件,然后退出 作为扩展,我想添加一些代码实现 您可以在组件中设计并实现一个有效的
init()->start()->stop()->destroy()
life。您可以让组件在init()
中从现有转储初始化或加载数据,并在stop()
函数中序列化状态
为了增加一些简单性,您可以有一个Lifecycle
接口的基本实现,可以扩展到您的组件
其他参考资料:
生命周期接口及其基本实现。也许你可以从中挽救一些东西,这样你就可以开始将你的对象序列化成一个文件…@GarryLittlewolf请寻找Java对象的序列化。这非常简单,特别是如果您不需要其他格式的序列化表单,如XML、JSON、GSON等。我认为您确实不需要XML等格式的序列化表单。因此,请坚持使用默认的二进制形式。让Java为您完成这项工作。您只需要知道您的“状态”(或当前对象模型)作为文件写入磁盘并读取。就这些。:)听起来不错。感谢您的改进:)@Alp谢谢:)如果您能为我的项目提供帮助,我将不胜感激D