在给定的链接中,查看给定的选项并选择使用此代码描述最糟糕情况的选项:
问问题
140 次
3 回答
4
可以创建多个 Mango 实例
是:如果两个线程getInstance
同时执行,它们都可以看到INSTANCE
null 并创建一个新实例
芒果永远不会被创造出来
呵呵...如果您调用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 回答