【发布时间】:2013-03-14 15:16:09
【问题描述】:
我有一个 Gui 类,它是一个 Singleton,因为许多其他类必须使用 Gui 的方法,并且任何时候都应该只有一个 Gui 的实例。
我还有一个 Player 类(有点像 Audioplayer),它也是一个 Singleton。
当我启动 Gui 时,我告诉玩家获取当前状态(这会创建一个新的玩家实例)并将其显示在 Gui 上。因此,玩家创建了一个 Gui 的新实例,因为 Gui 的 Constructor 还没有完成。
因此,这会产生无限递归。 我想保留单例模式。 有没有办法将 getInstance() 中的实例设置为“null”以外的其他值,即使 Constructur 尚未完成?
谢谢
【问题讨论】:
-
如果你仍然想使用单例,一个简单的方法是使用同步块,例如: public static Gui getInstance(){ // 同步很昂贵,因此请在外面检查。 if(instance == null){ synchronized(Gui.class){ // 在获得控制权后再次检查是否有其他线程 // 已经更新了实例。 if(instance == null){ instance = new Gui(); } } } 返回实例; }
标签: java design-patterns recursion singleton infinite