Singleton什么时候不能作为Singleton工作?

可能重复:
用其他方式破解单身人士

Singleton不能作为Singleton工作时,有人能告诉我吗?

作者Joshua Fox在Sun网站上发布了很好的post。 请仔细阅读。

下面是其中一些情况,当你的Singleton不表现时。

  1. 两个或更多虚拟机中的多个单身人士
  2. 不同类加载器同时加载多个单身人士
  3. 单例类由垃圾收集销毁,然后重新加载
  4. 有目的地重装单身人士课程
  5. 已经过序列化和反序列化的Singleton对象的副本

如果给定的类由多个类加载器加载,则单例(在Java领域中)将不能作为单例工作。 由于单个类可以在多个类加载器中存在(或者可以加载),因此对于给定的JVM实例,很可能具有“所谓的”单例类的“多个”实例。 但这是一个非常罕见的情况,并没有发生太多。 🙂

请使用此链接。 希望这能帮助你更好地http://java.sun.com/developer/technicalArticles/Programming/singletons/

如果您能够创建多个类的实例,那么它不会通过使用克隆,反序列化等方式保持单例。

这样的事情会违背Singleton的目的:

 public class BadSingleton { private BadSingleton() { } public BadSingleton getInstance() { return new BadSingleton(); } } 

每次调用getInstance()方法时,上面将返回BadSingleton类的新实例。 这将允许类的各种实例违反Singleton设计模式的目的。

通过使用多个类加载器也可以实现类似的场景(即使正确编写了Singleton)。