public class Singleton {
private volatile static Singleton singleton;//第一步檢查
public static Singleton getInstance() {
if (singleton == null) {//第二步檢查
synchronized (Singleton.class) {
if (singleton == null) {
singleton = new Singleton();
}
}
}
return singleton;
}
}
餓漢式(先創建出實例)
class Singleton{
//靜態實例
private static Singleton singleton = new Singleton();
//構造函數
private Singleton(){};
public Singleton getInstance(){
return singleton;
}
}
枚舉
enum Singleton{
INSTANCE; //枚舉成員
private Singleton singleton;
private Singleton{
singleton = new Singleton();
}
public Singleton getInstance(){
return singleton;
}
}
//獲得實例:Singleton.INSTANCE.getInstance();
靜態內部類
class Singleton{
//靜態內部類
private static calss SingletonHolder{
private static final Singleton singleton = new Singleton();
}
//構造函數
private Singleton(){};
public static final Singleton getInstance(){
return SingletonHolder.singleton;
}
}
靜態代碼塊
class Singleton{
//靜態變量
private static Singleton singleton = null;
//構造函數
private Singleton(){};
//靜態代碼塊
static{
singleton = new Singleton();
}
public Singleton getInstance(){
return singleton;
}
}