1、两次判空实现单例
优点:资源利用率高,效率高。缺点:第一次加载时反应稍慢,由于JAVA内存模型的原因偶尔会失败。
public class Singleton {
private static Singleton instance = null; //私有构造方法
private Singleton() {
}
public static Singleton getInstance() {
if (null == instance) {
synchronized (Singleton.class) {
if (null == instance) {
instance = new Singleton();
}
}
}
return instance;
}
}
2、静态内部类实现单例
优点:可以确保线程安全,也能够保证单例对象的唯一性,同时延迟了单例的实例化。
public class Singleton {
//私有构造方法
private Singleton() {
}
public static Singleton getInstance() {
return SingletonHolder.instance;
}
private static class SingletonHolder {
private static final Singleton instance = new Singleton();
}
}
3.其实大部分人用的可能是下面这种,对于要求不高的,也可以接受。
public class Singleton {
//私有构造方法
private Singleton() {
}
public static Singleton getInstance() {
return SingletonHolder.instance;
}
private static class SingletonHolder {
private static final Singleton instance = new Singleton();
}
}