單例模式安全
public class EagerSingleton {spa
private static EagerSingleton instance = new EagerSingleton();線程
/**get
* 私有默認構造子同步
*/io
private EagerSingleton(){}class
/**方法
* 靜態工廠方法線程安全
*/static
public static EagerSingleton getInstance(){
return instance;
}
}
public class LazySingleton {
private static LazySingleton instance = null;
/**
* 私有默認構造子
*/
private LazySingleton(){}
/**
* 靜態工廠方法
*/
public static synchronized LazySingleton getInstance(){
if(instance == null){
instance = new LazySingleton();
}
return instance;
}
}
public class Singleton {
private volatile static Singleton instance = null;
private Singleton(){}
public static Singleton getInstance(){
//先檢查實例是否存在,若是不存在才進入下面的同步塊
if(instance == null){
//同步塊,線程安全的建立實例
synchronized (Singleton.class) {
//再次檢查實例是否存在,若是不存在才真正的建立實例
if(instance == null){
instance = new Singleton();
}
}
}
return instance;
}
}
public class Singleton {
private Singleton(){}
/**
* 類級的內部類,也就是靜態的成員式內部類,該內部類的實例與外部類的實例
* 沒有綁定關係,並且只有被調用到時纔會裝載,從而實現了延遲加載。
*/
private static class SingletonHolder{
/**
* 靜態初始化器,由JVM來保證線程安全
*/
private static Singleton instance = new Singleton();
}
public static Singleton getInstance(){
return SingletonHolder.instance;
}
}
public enum Singleton {
/**
* 定義一個枚舉的元素,它就表明了Singleton的一個實例。
*/
uniqueInstance;
/**
* 單例能夠有本身的操做
*/
public void singletonOperation(){
//功能處理
}
}