1、饿汉。线程安全,类装载时就实例化。
public class SingleInstance {
private SingleInstance(){}
private static SingleInstance mSingleInstance = new SingleInstance();
public static SingleInstance getInstance(){
return mSingleInstance;
}
}
2、懒汉。懒加载,效率较低。
public class SingleInstance {
private SingleInstance(){}
private static SingleInstance mSingleInstance;
public static synchronized SingleInstance getInstance(){
if (mSingleInstance == null) {
mSingleInstance = new SingleInstance();
}
return mSingleInstance;
}
}
3、双重校验锁。使用volatile变量,轻量级的同步机制。
public class SingleInstance {
private SingleInstance(){}
private volatile static SingleInstance mSingleInstance;
public static SingleInstance getInstance(){
if (mSingleInstance == null) {
synchronized (SingleInstance.class) {
if (mSingleInstance == null) {
mSingleInstance = new SingleInstance();
}
}
}
return mSingleInstance;
}
}
4、静态内部类
public class SingleInstance {
private SingleInstance(){}
public static SingleInstance getInstance(){
return SingleHolder.instance;
}
private static class SingleHolder {
private static SingleInstance instance = new SingleInstance();
}
}
5、枚举
public enum SingleInstance {
INSTANCE;
}