我认为单例仅适用于JVM 但我试图让它们(单例对象的状态)在分布式环境中保持同步
正如我们所知,Singleton在JVM中只有一个实例,因此当我们在任何JVM Singleton中获得任何更改时,我们如何更新其他JVM Singleton实例?
这里我的重点是完全保持对象的状态同步。
答案 0 :(得分:0)
让单例成为类
中的静态字段答案 1 :(得分:0)
这显然取决于你想要在那里只有一次(单身)。如果它是数据/状态,您可以检查现代分布式数据库以及它们如何在不同实例(甚至最终)中保持统计信息一致。
如果你想要一个单一的实例,你可以使用计算机网络中唯一的东西,比如SocketAddress(绑定到一个真实的主机名)。您的“Distributed Singleton”启动时尝试连接到该地址,如果继续,它只是一个委托。如果没有,它可以尝试绑定到该地址 - 接受来自那里的连接,成为一个 - 或者只是放弃。
在委托模式下,对实例的所有方法调用都只是通过套接字发送到ONE。 作为ONE,它可以跟踪谁连接并将传入的消息映射到方法调用并根据其内部状态进行回复。
这是一个没有任何故障转移,冗余等的涂鸦,但它原则上应该完成这项工作。
无论如何,我建议您检查群集框架(例如http://akka.io),这些框架提供了(大多数情况下)开箱即用的内容。