Java中的單例模式

2021-08-01 22:16:43 字數 1171 閱讀 7527

保證只有乙個物件

類載入的時候物件就已經存在,餓漢式是執行緒安全的,在類建立的同時就已經建立好乙個靜態的物件供系統使用,以後不再改變,上述例子就是乙個惡漢式

類載入的時候物件還不存在,就是所謂的延遲載入方式,需要時再進行建立,懶漢式如果在建立例項物件時不加上synchronized則會導致對物件的訪問不是執行緒安全的

public class single 

// 這種情況是執行緒不安全的

public static single getinstance()

return sintance;

}}

執行緒安全

public class single 

public static single getinstance()

}return sintance;

}}

看似完美,但是指令重排序會引起空指標異常

原因來自sinstance = new single();這裡可以分解為

memory = allocate();    //分配記憶體空間

ctorinstance(memory); //例項化物件

sintance = memory; //sintance 指向分配的記憶體位址

但是重排序後

memory = allocate(); //分配記憶體空間

sintance = memory; //sintance 指向分配的記憶體位址

ctorinstance(memory);//例項化物件

在jdk1.5之後使用volatile關鍵字禁止重排序

public class single 

public static single getinstance()

}return sintance;

}}

public class single 

private single() {}

public static single getinstance()

}

使用內部類的方式,既能保證執行緒安全,有能保證在呼叫方法的是載入這個內部類,建立的物件是隨著內部類的載入而載入的。

java中單例模式

定義 乙個類只允許產生乙個例項化物件。我們先想想類的例項化物件是如何產生的?它是通過類的構造方法產生的。現在只讓乙個類產生乙個例項化物件,我們就要考慮從它的構造方法入手,我們可以把建構函式私有化,這樣它就不能在類的外部被呼叫了。但如果我們還想在類的外部呼叫類內函式,就必須通過類的例項化物件來呼叫,但...

Java中的單例模式

一 概述 單例模式的寫法有好幾種,這裡主要有三種 懶漢式單例 餓漢式單例 登記式單例。單例模式有以下特點 1 單例類只能有乙個例項。2 單例類必須自己建立自己的唯一例項。3 單例類必須給所有其他物件提供這一例項。單例模式確保某個類只有乙個例項,而且自行例項化並向整個系統提供這個例項。在計算機系統中,...

java 中的單例模式

單例模式 一 保證乙個類只有乙個例項,並提供乙個訪問它的全域性訪問點。1.構造方法私有化 2.宣告乙個本類的物件 3.給外部提供乙個靜態方法用來讓外部獲取物件例項 二 兩種實現方式 餓漢式 懶漢式餓漢式 private static single01 single new single01 餓漢式 ...