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;
}