1.提前初始化,放弃延迟加载
public class Singleton1
{
private static Singleton1 instance=new Singleton1();
private Singleton1(){}
public static Singleton1 getInstance()
{
return instance;
}
}
2.volatile关键字禁止指令重排+双重检查锁定(DCL)
public class Singleton2
{
private static volatile Singleton2 instance;
private Singleton2(){}
public static Singleton2 getInstance()
{
if (instance==null)
{
synchronized(Singleton2.class)
{
if (instance==null)
{
instance=new Singleton2();
}
}
}
return instance;
}
}
3.占位类来实现延迟加载
public class Singleton3
{
private static class Holder
{
public static Singleton3 instance=new Singleton3();
}
private Singleton3(){}
public static Singleton3 getInstance()
{
return Holder.instance;
}
}