java的單例設計模式

2021-07-12 06:08:04 字數 1374 閱讀 4518

單例設計模式,確保了乙個類只有乙個物件,也就是不會提供對外公開的構造方法

建立物件在類的內部進行,對外只提供乙個共有的訪問物件的方法

單例設計模式又有懶漢式,和餓漢式

懶漢式:

懶漢式的設計有兩個要點

2.synchronized的同步塊中的鎖定資源為物件是,就可以將引數設定為(this)

但是這裡鎖定的靜態資源,這裡就需要用到(jvm.class)

/**

* 懶漢式

* 1.構造器私有化,避免外部直接建立物件

* 2.宣告私有靜態變數

* 3.建立乙個對外公共的靜態方法,訪問該物件

* @author wwydepp

* */

class jvm

public static jvm getinstance(long time) catch (interruptedexception e)

instance = new jvm();}}

} return instance;

}}

餓漢式:

餓漢式相對簡單,由於它在宣告靜態私有屬性的同時就建立了物件,所以避免了執行緒安全

因為在類載入的時候就已經把物件建立好了,而類只載入一次

為了提高效率,將靜態私有屬性放在內部類中,這樣當jvm2這個類載入時,會載入這個類的所有屬性和方法,

只有使用getinstance方法的時候,才會載入jvmholder類,類只有在使用的時候才會載入

/**

* 餓漢式

* 1.構造器私有化,避免外部直接建立物件

* 2.宣告私有靜態變數,建立物件

* 3.建立乙個對外公共的靜態方法

*/class jvm2

private jvm2(){}

public static jvm2 getinstance()

}

測試上述兩個類

public class syndemo02 

}class jvmthread extends thread

public jvmthread(long time)

}

輸出結果為:

thread-1--creatthread.jvm2@2e6e1408

thread-0--creatthread.jvm2@2e6e1408

可見,兩個執行緒物件對應的是用乙個物件,如果不使用synchronized關鍵字,則還是會建立兩個不同的物件

那就不符合單例模式的要求了

jvm類中新增執行緒休眠,也只是為了放大錯誤,容易看出是建立了兩個不同物件

java設計模式 單例設計模式

public class main 餓漢式 空間換時間 多執行緒訪問不會建立多個物件 author admin class singleton 2建立本類物件 private static singleton s new singleton 3對外提供公共的訪問方法 public static si...

Java單例設計模式

單例設計模式也有人叫單態,基本上有兩種寫法一種是餓漢式,另外一種是懶漢式。餓漢式就是一開始就建立了例項物件 public class singleton public static singleton getintance 懶漢式是需要的時候才建立 它比較懶 而且會涉及執行緒同步問題,需要增加同步 ...

java 單例設計模式

單例設計模式 保證乙個類在記憶體中只有乙個物件。模式 模式就是解決 一類 問題的固定步驟 模式的概念最早起源於建築行業 建房子的步驟都是一樣子 打地基 澆柱子 蓋樓面 砌牆 封頂 裝修 入住軟體行業中23種設計模式 單例設計模式 模板設計模式 裝飾者設計模式 觀察者設計模式 工廠設計模式單例設計模式...