首先,我們來看看單例模式的定義,單例模式是指:保證在一個線程中,某個類有且僅有一個執行個體。
1、餓漢式實作單例模式
這種方式之是以稱之為餓漢式,是因為在代碼中一開始就建立了這個類的執行個體。
public class Hungry {
private Hungry() {
}
private static final Hungry HUNGRY = new Hungry();
public static Hungry getInstance() {
return HUNGRY;
}
}
2、靜态内部類實作單例模式
public class Holder {
private Holder() {
}
public static Holder getInstance() {
return InnerClass.HOLDER;
}
private static class InnerClass{
private static final Holder HOLDER = new Holder();
}
}
3、懶漢式實作單例模式
public class Singleton {
private Singleton(){
}
private volatile static Singleton INSTANCE;
// 雙重鎖校驗模式 懶漢式單例
public Singleton getInstance() {
if(INSTANCE==null) {
synchronized (Singleton.class){
if(INSTANCE==null){
INSTANCE = new Singleton();//不是一個原子性操作
}
}
}
return INSTANCE;
}
}
4、枚舉實作單例模式
public enum EnumSingle {
INSTANCE;
public EnumSingle getInstance() {
return INSTANCE;
}
}