我试图找出以下MC问题的答案。我尝试在Google上寻找答案,但人们似乎对此问题有不同的答案。有人可以解释他们的答案吗?
public class Gingleton {
private static Gingleton INSTANCE = null;
public static Gingleton getInstance()
{
if ( INSTANCE == null )
{
INSTANCE = new Gingleton();
}
return INSTANCE;
}
private Gingleton() {
}
}
返回垃圾数据
最佳答案
getInstance()
中的新实例创建不会以任何方式同步,因此有可能在多线程环境中创建多个实例。为了确保只有一个实例,您应该执行以下操作:
public class Gingleton {
// volatile
private static volatile Gingleton INSTANCE = null;
public static Gingleton getInstance()
{
if ( INSTANCE == null )
{
synchronized (Gingleton.class) { // Synchronized
if ( INSTANCE == null )
{
INSTANCE = new Gingleton();
}
}
}
return INSTANCE;
}
private Gingleton() {
}
}