- 懒汉模式
public class Singleton {
private Singleton() {
}
private volatile static Singleton mInstance;// 第一层锁:保证变量可见性
public static Singleton getInstance() {
if (mInstance == null) {
synchronized (Singleton.class) {
if (mInstance == null) {
mInstance = new Singleton();
}
}
}
return mInstance;
}
}
- 恶汉模式
class Singleton {
private static final Singleton ourInstance = new Singleton();
static Singleton getInstance() {
return ourInstance;
}
private Singleton() {
}
}
- 静态内部类模式
public class Singleton {
// 私有构造函数
private Singleton() {
}
public static Singleton getInstance() {
return SingletonHolder.instance;
}
private static class SingletonHolder {
private static final Singleton instance = new Singleton();
}
}
其中用的最多也是最常用的是第3种,静态内部类单例。