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

时间:2012-07-26 07:02:06

标签: java singleton

  

可能重复:
  cracking singleton with other ways

Singleton无效Singleton时,有人可以告诉我吗?

5 个答案:

答案 0 :(得分:9)

作者 Joshua Fox Sun网站上发布了非常好的帖子。请仔细阅读。

下面是<{1}}表现不佳的情况下的一些情况。

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

答案 1 :(得分:1)

如果给定的类由多个类加载器加载,则单例(在Java中)不会作为单例工作。由于单个类可以在多个类加载器中存在(或者可以加载),因此很可能具有多个&#34;多个&#34; &#34;据称&#34;的实例给定JVM实例的单例类。但这是一个非常罕见的情况,并没有发生太多。 :)

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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

答案 4 :(得分:-1)

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

public class BadSingleton
{
    private BadSingleton()
    {
    }

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

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

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