標籤:其他 method return att 返回 ... enum 預設 注釋
直接上代碼(代碼注釋比較完整):
第一種:
package pattern.singleton.doublecheck;
public class Singleton {
// 私人化預設構造方法,防止外部產生此執行個體
private Singleton(){}
// 聲明此單一執行個體
// volatile: 能夠及時通知其他線程,更新其線程快取資料
private volatile static Singleton INSTANCE;
// 向外提供此單一執行個體
public static Singleton getInstance(){
// 如果INSTANCE為空白,準備去上鎖及執行個體化賦值
// 如果不為空白,那麼直接去返回執行個體,防止了要再次上鎖的效能問題
if(INSTANCE == null) {
// 上鎖 因為是靜態方法,需要上類鎖
synchronized(Singleton.class) {
// 再次判斷INSTANCE是否為空白,因為可能上一個線程已經執行個體化並賦值過了
if(INSTANCE == null) {
// 執行個體化並賦值
INSTANCE = new Singleton();
}
}
}
// 返回執行個體
return INSTANCE;
}
// what ever field(s)...
// what ever method(s)...
}
第二種:
package pattern.singleton.innerclass;
public class Singleton {
// 私人化預設構造方法,防止外部產生此執行個體
private Singleton(){}
// 聲明私人靜態內部類,包含外部類的靜態不可變執行個體
private static class innerClass{
private static final Singleton INSTANCE = new Singleton();
}
// 向外提供此單一執行個體
public static Singleton getInstance() {
return innerClass.INSTANCE;
}
// what ever field(s)...
// what ever method(s)...
}
第三種:
package pattern.singleton.enume;
public enum Singleton {
// 因為一個enum成員相當於一個執行個體對象,直接通過Singleton.INSTANCE來擷取
INSTANCE;
// what ever field(s)...
// what ever method(s)...
}
java單例模式的三種實現(安全執行緒)