黑馬程式設計師 單例的兩種實現方式

2021-06-27 18:13:39 字數 1229 閱讀 2030

單例模式只是像外界提供乙個物件,它在自己內部建立乙個自己的物件並且提供乙個方法讓外界來得到,從而保證程式中只有乙個自己的物件。

第一種:餓漢式

public class single 

//向外界提供乙個得到該物件的方法

public static single getinstance()

}

private staticfinal single s = new single();

這裡的final寫與不寫都可以,但是寫上的話會更嚴謹,所以還是寫上好

第二種:懶漢式(延遲載入)

public class single 

public static single getinstance()

return s; }

}

該寫法延遲了物件的建立,更加節約空間,因為在呼叫getinstance方法時才建立物件。

這裡要注意

private static (這裡不能像餓漢式那樣寫final,因為是延遲載入,如果寫了final關鍵字那麼s就一直為null了)single s = null

懶漢式還有乙個多執行緒訪問時的安全問題

public static single getinstance()

return s;

}

如果a執行緒進來後走到箭頭指的位置後cpu切換到了b執行緒,那麼a就會停在那個位置然後b執行緒開始走,b執行緒再停在那裡a執行緒醒了就會出現這兩個執行緒都進入到if的判斷了,於是會建立兩次物件,而單例只能有乙個物件,所以要讓給方法進行同步處理

public static synchronized single getinstance()

return s;

}

進行同步後就解決了問題

但是這裡還有個效率的問題,因為加了同步後每個執行緒都要判斷鎖會很慢,所以應該優化一下

public static single getinstance()}} 

return s;

}

上面多了一層判斷,因為多個執行緒進來時都會判斷一層外層的s是否為null,當物件沒建立的時候就會繼續判斷鎖,直到建立物件。然後其他的執行緒進來後直接判斷第一層的s是否為null,因為已近建立了物件所以他就不會再去判斷鎖了也就提高了效率

黑馬程式設計師 單例模式

什麼叫單例模式 單例模式 singleton 是一種常用的設計模式。單例模式,也叫單子模式。在應用這個模式時,單例物件的類必須保證只有乙個例項存在。許多時候整個系統只需要擁有乙個的全域性物件,這樣有利於我們協調系統整體的行為 單例模式特點 顯然單例模式的要點有三個 一是某個類只能有乙個例項 二是它必...

黑馬程式設計師 單例模式

asp.net unity開發 net培訓 期待與您交流!單例模式 解決乙個類在記憶體中只存在乙個物件的情況 為了保證避免程式過多建立物件,禁止其他程式建立該類物件 為了其他程式可以訪問該類物件,只好在本類中自定義物件 為了方便其他程式對自定義物件的訪問,可對物件提供一些訪問方式。單例模式實現方式 ...

單例模式(java兩種方式實現)

測試類 public class singletontest1 單例類 class singleton 構造方法私有帶來乙個問題,就是不能產生例項了,所以通過寫乙個方法返回乙個例項 第二步 public static singleton getinstance 必須為static 這樣在main中才...