在多线程的情况下有可能产生多个实例
1. 使用synchronized关键字,但是这样有可能造成资源浪费并影响性能。
2. 在static initializer中就初始化实例,但是这样在客户程序还没有要用到这个对象的时候就已经创建了对象实例,造成不必要的浪费
3. 使volatile关键字,进行双重检查
1. 使用synchronized关键字,但是这样有可能造成资源浪费并影响性能。
2. 在static initializer中就初始化实例,但是这样在客户程序还没有要用到这个对象的时候就已经创建了对象实例,造成不必要的浪费
3. 使volatile关键字,进行双重检查
private
volatile
static
Singleton instance;
public static Singleton getInstance()
{
if (instance == null )
{
synchronized (Singleton.Class);
if (instance == null )
instance = new Singleton();
}
return instance;
}
public static Singleton getInstance()
{
if (instance == null )
{
synchronized (Singleton.Class);
if (instance == null )
instance = new Singleton();
}
return instance;
}