java單例模式懶漢和餓漢
實現:
1 公開靜態的對外訪問方法
2 私有的構造方法(保證不被外部呼叫)
3 類載入時候建立物件
餓漢式:
public class Instance1 {
// 餓漢式單例
public static void main(String[] args) {
Instance1 d1 = Instance1.getInstance1();
Instance1 d2 = Instance1.getInstance1();
if (d1 == d2 ) {
System.out.println("====");
}
}
private static Instance1 d = new Instance1();
private Instance1() {
}
public static Instance1 getInstance1() {
return d;
}
}
懶漢式:
public class Instance2 {
// 懶漢試
public static void main(String[] args) {
Instance2 d1 = Instance2.getInstance2();
Instance2 d2 = Instance2.getInstance2();
if (d1 == d2) {
System.out.println("====");
}
}
private static Instance2 d = null;
private Instance2() {
}
public static Instance2 getInstance2() {
if (d == null) {
d = new Instance2();
}
return d;
}
}
懶漢式餓漢式有什麼區別:
餓漢式 在類載入的時候物件就已經new出來,對記憶體開銷比較大,不建議這樣使用。
懶漢式 單執行緒下執行緒安全,一定是單例模式。
在多執行緒下一定就是安全的嗎? 那可不一定?
ab兩個執行緒同時在d==null這行程式碼位置時,容易產生兩個物件,這樣子無法保證單例模式了,所以應該採用加鎖的方式進行同步。
public static synchronized Instance2 getInstance2() {
if(d == null) {
d = new Instance2();
}
return d;
}
以上程式碼,ab執行緒同時進入,必須等待一個執行緒釋放之後另一個執行緒才能進入鎖,這樣子程式碼不是很高效(如果有一個執行緒一直處於未釋放鎖,那另一個執行緒會一直處於等待狀態),所以採用雙重鎖進行判斷。
public class Instance2 {
// 懶漢試
public static void main(String[] args) {
Instance2 d1 = Instance2.getInstance2();
Instance2 d2 = Instance2.getInstance2();
if (d1 == d2) {
System.out.println("====");
}
}
private static Instance2 d = null;
private Instance2() {
}
public static Instance2 getInstance2() {
if (d == null) {
synchronized (Instance2.class) {
if (d == null) {
d = new Instance2();
}
}
}
return d;
}
}
相關文章
- 詳談單例、餓漢、和懶漢模式單例模式
- 懶漢模式和餓漢模式模式
- 設計模式:單例模式 (關於餓漢式和懶漢式)設計模式單例
- C#單例—餓漢式和懶漢式C#單例
- 【java】單例設計模式——餓漢式和懶漢式、Runtime、TimerJava單例設計模式
- 設計模式——懶漢式單例類PK餓漢式單例類設計模式單例
- scala:分別使用懶漢式和餓漢式實現單例模式單例模式
- 餓漢式單例與懶漢式單例的C#實現單例C#
- java學習回顧---懶漢式和餓漢式Java
- (單例設計模式中)懶漢式與餓漢式在多執行緒中的不同單例設計模式執行緒
- 五種單例模式實現懶漢+餓漢+雙重檢測鎖實現+靜態內部類改進餓漢式+列舉單例模式
- C++之this指標、拷貝構造、賦值構造、單列模式(餓漢模式、懶漢模式)C++指標賦值模式
- 餓漢模式C++模式C++
- 設計模式-單例模式之餓漢式-多執行緒設計模式單例執行緒
- 設計模式:單例模式介紹及8種寫法(餓漢式、懶漢式、Double-Check、靜態內部類、列舉)設計模式單例
- java設計模式之單例模式你真的會了嗎?(懶漢式篇)Java設計模式單例
- 別再用懶漢模式了——從JVM的角度看單例模式模式JVM單例
- 設計模式-單例模式之懶漢式-多執行緒設計模式單例執行緒
- C++單例懶漢式和多執行緒問題(MUTEX 保護)C++單例執行緒Mutex
- DCL懶載入單例模式單例模式
- java 漢字轉配音Java
- Java簡單實現漢語詞頻統計Java
- C#漢字轉漢語拼音C#
- 【設計模式】漢堡中的設計模式——策略模式設計模式
- ABAP和Java單例模式的攻防Java單例模式
- java 單例模式Java單例模式
- Java單例模式Java單例模式
- 漢家松鼠CG:《漢家江湖2》的開發進度披露和思考
- 漢羅塔問題 java實現Java
- 【設計模式】漢堡中的設計模式——觀察者模式設計模式
- Java單例模式:缺點和優點Java單例模式
- Java設計模式–單例模式Java設計模式單例
- Java設計模式——單例模式Java設計模式單例
- Java設計模式--單例模式Java設計模式單例
- Java設計模式 | 單例模式Java設計模式單例
- Java設計模式【單例模式】Java設計模式單例
- Java設計模式-單例模式Java設計模式單例
- Java 判斷字串中是否含有漢字.Java字串