標籤:uniq single 問題 全域 訪問 java 執行個體 多個 多個執行個體
單例模式:
確保一個類只有一個執行個體,並提供一個全域訪問點
餓漢式:(安全執行緒)
public class Singleton {
private static Singleton uniqueInstance = new Singleton();
private Singleton() {
}
public static Singleton getInstance() {
return uniqueInstance;
}
}
懶漢式:(線程不安全)
public class Singleton {
private static Singleton uniqueInstance;
private Singleton() {
}
public static Singleton getInstance() {
if (uniqueInstance == null) {
uniqueInstance = new Singleton();
}
return uniqueInstance;
}
}
雙重檢查加鎖:(安全執行緒)
public class Singleton {
private volatile static Singleton uniqueInstance;
private Singleton() {
}
public static Singleton getInstance() {
if (uniqueInstance == null) {
synchronized (Singleton.class) {
if (uniqueInstance == null) {
uniqueInstance = new Singleton();
}
}
}
return uniqueInstance;
}
}
要點:
1、單例模式確保程式中一個類最多隻有一個執行個體
2、單例模式也提供訪問這個執行個體的全域點
3、在Java中實現單例模式需要私人的構造器,一個靜態方法和一個靜態變數
4、確定在效能和資源上的限制,然後小心地選擇適當的方案來實現單例,以解決多線程的問題
5、如果不是採用第五的Java2,雙重檢查加鎖實現會失效
6、小心,你如果使用多個類載入器,可能導致單例失效而產生多個執行個體
7、如果使用JVM1.2或之前的版本,你必須建立單例註冊表,以免垃圾收集器將單例回收
java設計模式----單例模式