0

在给定的链接中,查看给定的选项并选择使用此代码描述最糟糕情况的选项:

https://gist.github.com/d34th4ck3r/49e9ae56458d4ed0f8ae

4

3 回答 3

4

可以创建多个 Mango 实例

是:如果两个线程getInstance同时执行,它们都可以看到INSTANCEnull 并创建一个新实例

芒果永远不会被创造出来

呵呵...如果您调用getInstance,将创建一个实例,所以不会。

构造函数是私有的,不能被调用

不,它可以从类中调用getInstance

value 可以被垃圾回收,调用 getInstance 可能会返回垃圾数据

INSTANCE只要它是可访问的,就不会被垃圾收集 - 在静态变量的情况下,即在 JVM (*) 的整个生命周期内。

(*) 更准确地说,只要加载了类,它就不会被垃圾收集。如果关联的类加载器本身被垃圾收集,则可以卸载一个类。

于 2013-03-14T12:07:44.047 回答
0

这是经典的单例对象设计模式

最糟糕的是取决于要求。根据我的理解,如果这是一个更大的程序类,那么芒果永远不应该制作超过一次。

正如 assylias 所说,在有一个 synchronized 关键字之前,结果可能会导致 2 个芒果对象(但那是一个极端情况)

synchronized public static Mango getInstance()
    {
        if ( INSTANCE == null )
        {
            INSTANCE = new Mango();
        }
        return INSTANCE;
    }
于 2013-03-14T12:14:11.930 回答
0

我认为答案是选项 A:“可以创建多个 Mango 实例”如果没有适当的同步,两个或多个线程可能会同时调用 getInstance(),这会使 Mango 成为不合格的单例

顺便说一句,这看起来像是一个家庭作业或面试问题!:)

于 2013-03-14T12:14:42.460 回答