RMI 通信期间单例类的序列化

Posted

技术标签:

【中文标题】RMI 通信期间单例类的序列化【英文标题】:Serialization of Singleton Classes during RMI communcation 【发布时间】:2013-10-04 19:24:34 【问题描述】:

虽然我正在阅读 readResolve 方法的解释,但很多参考资料都解释说,当单例类被反序列化而该类的对象被序列化并通过 RMI 传输时,该方法将有助于保证单例属性。

现在我的问题是,当 RMI 调用发生时,单例类对象将通过不同的 JVM(具有不同的类加载器)传输,因此在反序列化之后,我们将有另一个单例类实例(在不同的 JVM 中)。我说的对吗?

那么在 RMI 调用的上下文中,实现 readResolve 方法有什么用?

【问题讨论】:

【参考方案1】:

因此,如果您再次发送它它会解析为已经存在的那个。这可能与您的意图相反。不要在 RMI 中使用单例来迷惑自己。

【讨论】:

所以你的意思是说,readResolve 确保在单个 JVM 中维护单例属性?如果 readResolve 方法不在该类中,则每次我们在 RMI 客户端上进行反序列化时,它都会创建不同的实例。我说的对吗? 我就是这么说的。我不喜欢这种“你的意思是说”的游戏。

以上是关于RMI 通信期间单例类的序列化的主要内容,如果未能解决你的问题,请参考以下文章

Android 设计模式 笔记 - 单例模式

Java中Class和单例类的作用与类成员的理解

如何实现单例模式

设计模式 创建者模式 -- 单例模式存在的问题和解决办法(序列化反序列化破坏单例模式 & 反射破坏单例模式)

4_分布式通信框架RMI

单例模式