Java中的兩種單例模式 餓漢式和懶漢式

2021-07-25 22:52:56 字數 1250 閱讀 9825

問題

首先我們需要來考慮2件事情,既然單例模式需要保證系統中最多只有乙個這樣的物件事例,那麼我怎麼才能確保只能有乙個例項呢??

構造方法:如果構造方法是 public,那麼任何類都可以 new 我的物件,不能保證單例,所以單例模式構造方法一定是 private的

如果構造方法是 private的,那麼我怎麼 new物件呢?說明我只能在我自己的類中,先new出自己,然後提供給外部。

由於系統只有乙個單例物件,那麼執行緒同步是一定需要的,怎麼來做呢?

就是因為上面的第2步,我們就出現了很多單例模式的寫法,下面我們一一介紹:

餓漢式

public class singleton 

public static singleton getinstance()

}也可以這樣寫

public class singleton

private singleton(){}

public static singleton getinstance()

}client

singleton s = singleton.getinstance();

懶漢式

public class singleton 

public static singleton getinstance()

return instance;

}}

執行緒安全

如果對執行緒學得還行的同學就應該知道,上面的飽漢式寫法其實不是那麼的安全!!雖然在 getinstance() 中有非空判斷,但是執行緒這個東西是由

時間片

控制的,如果乙個執行緒剛剛非空判斷通過了,然後切換到下個執行緒,也執行並通過非空判斷,並切換到上乙個執行緒,其實兩個執行緒都會執行new操作,就不單例了!(雖然發生概率不高)但是我們為了更加的準確,我們來看看執行緒安全的版本怎麼寫

public class singleton 

public static synchronized singleton getinstance()

return instance;

}}

雙重檢查加鎖

public class singleton 

public static singleton getinstance() }}

return instance;

}}

單例模式 餓漢式 兩例

單例模式建立的幾種方式 1.餓漢式 1 構造器私有化同時建立物件 2 宣告乙個私有靜態屬性 3 對外提供訪問屬性的靜態方法 author administrator public class singleton 提供乙個可以讓外部訪問class的靜態方法,可以直接訪問 public static s...

JAVA中的兩種單例模式

乙個類中我們可以通過new 建立很多的物件,但是有的類只允許有乙個物件來進行操作,這就是所謂的單例模式。我們都知道單例模式有兩種,一種是餓漢模式,一種是懶漢模式。顧名思義,懶漢模式就是在需要時候才建立單例物件,而餓漢模式我們可以理解它很餓所以急切提前把單例物件建立好,不管需不需要。關於單例物件,我們...

Java中的設計模式 單例模式(餓漢式)

一套優秀 的設計經驗總結。它是特定場景下特定問題的處理方法。重用設計模式和 提高擴充套件性 大量使用面向介面程式設計,預留擴充套件位 專案擴充套件的原則 對修改關閉,對新增開啟,也叫開閉原則 提高靈活性,降低耦合度。提高開發效率,節省大量的時間。乙個類只能由乙個例項物件,乙個類只能有乙個物件,但是要...