單例模式真的只有乙個例項嗎

2021-08-20 13:13:54 字數 739 閱讀 8956

public class singleton 

private static class singletonholder

public static singleton getinstance()

}

相信大家對這個單例模式都不陌生,它既保證了執行緒安全,又能夠延遲例項化(即呼叫getinstance()方法時才例項化)。

這種方式簡單、有效,保證了只有乙個例項。但是,在專案中發現,「只有乙個例項」這種說法其實是有隱含條件的,即前提條件是在某乙個應用中呼叫getinstance()方法,instance才是被例項化一次,那麼多個應用都有呼叫getinstance()方法,instance也是只被例項化一次嗎?答案是否定的。

經測試發現,不同的應用在呼叫getinstance()方法時,instance會被例項化多次,即若有3個應用呼叫了getinstance()方法,那麼instance將會被例項化3次。我在構造器中分別列印了呼叫者的name和id,具體如下:

應用a:name =executorthread#1, id = 161

應用b:name =asynctask #4, id = 86

應用c:name =binder:3788_6, id = 178

因此可以看出,單例模式是針對應用而言的,在整個系統中是可以存在多個例項的

單例模式,乙個類只能有乙個例項。地球只有乙個。

單例設計模式 單例設計模式就是保證某個類的例項有且只能有乙個不能隨意建立例項。例如 我們只有乙個地球,地球類的例項只能建立乙個。1 為了阻止類例項的new建立,可以做乙個private的建構函式。2 既然不能從外部使用new進行例項的建立,就從類內部進行例項的建立,為此可以提供乙個靜態方法和乙個要建...

servlet是只有乙個例項嗎

是的,乙個servlet只有乙個例項。在伺服器啟動後,當servlet第一次被訪問時例項化,以後訪問時都只呼叫service方法提供服務,這樣效率高,節約資源,不同用的的請求和狀態資訊都是儲存在公共servletcontext中,伺服器通過標識去區分,所以沒有必要給每個不同的請求都例項化乙個serv...

你真的懂單例模式嗎

單例模式 單例模式顧名思義,就是對於指定的類只有乙個例項,這樣可以節省系統資源,也省去過多的例項化導致物件版本太多,不易管理。1。首先需要保證該類不可以通過new來例項化。因為如果可以這樣,那麼就無法保證單例了。只需要把構造方法設定為private或者protected即可。2。既然外部無法訪問構造...