(1)饿汉模式
单例模式在类加载时就完成了初始化,所以类加载比较慢,但是获取对象的速度快。这种方式基于类加载模式,避免了多线程的同步问题。
public class Singleton{
private static Singletion instance = new Singletion();
private Singletion(){}
public static Singleton getInstance(){
return instance;
}
}
(2)懒汉模式(线程安全)
懒汉模式声明了一个静态对象,在用户第一次调用时初始化。
public class Singleton{
private static Singleton instance;
private Singleton(){}
public static synchronized Singleton getInstance(){
if(instance == null){
instance = new Singleton();
}
return instance;
}
}
(3)静态内部单例模式(推荐使用)
第一次加载并不会初始化,只有第一次调用时虚拟机加载SingletonHolder并初始化instance。这样不仅能保证线程安全,也能保证singleton类的唯一性。
public class Singleton{
private Singleton(){}
public static Singleton getInstance(){
return SingletonHolder.sInstance;
}
private static class SingletonHolder{
private static final Singleton sInstance = new Singleton();
}
}