單例模式整理

2022-05-04 21:03:09 字數 1174 閱讀 7068

單例模式的使用場景:

配置檔案的讀取。如日誌檔案,應用配置

。該伺服器的配置資訊存放在乙個檔案中,這些配置資料由乙個單例物件統一讀取,然後服務程序中的其他物件再通過這個單例物件獲取這些配置資訊

控制資源的情況下,方便資源之間的互相通訊。如執行緒池等

。資料庫連線操作

,增刪改

,如果非單例,就會有很多的物件例項建立。

如果當唯一例項尚未建立時,有兩個執行緒同時呼叫建立方法,那麼它們同時沒有檢測到唯一例項的存在,從而同時各自建立了乙個例項,

這樣就有兩個例項被構造出來,從而違反了單例模式中例項唯一的原則。

解決這個問題的辦法是為指示類是否已經例項化的變數提供乙個互斥鎖(雖然這樣會降低效率

)。懶漢式:有鎖才安全,但是效率低

public class singleton  

//執行緒不安全,用public static synchronized singleton getinstance()

//的方式可以保證執行緒安全,但是效率低

public static singleton getinstance()  

return instance;  

}  }  

餓漢式:執行效率高,但是初始化就分配記憶體,浪費記憶體

public class singleton  

public static singleton getinstance()  

}雙檢鎖/雙重校驗鎖(

dcl,即

double-checked locking

這種方式採用雙鎖機制,安全且在多執行緒情況下能保持高效能

public class singleton  

public static singleton getsingleton()  

}  }  

return singleton;  

}  }  

靜態內部類

public class singleton  

private singleton (){}  

public static final singleton getinstance()  

}   

單例模式 單例模式

餓漢式 急切例項化 public class eagersingleton 2.宣告靜態成員變數並賦初始值 類初始化的時候靜態變數就被載入,因此叫做餓漢式 public static eagersingleton eagersingleton new eagersingleton 3.對外暴露公共的...

單例 單例模式

簡單的實現乙個單例 instancetype sharedinstance return instance 真正的單例模式 myclass sharedinstance return instance id allocwithzone nszone zone return nil id copywi...

單例模式 懶漢式單例模式

單例模式有餓漢時模式和懶漢式 單例模式也就是說同一類只返回乙個物件供外部類使用 懶漢式即延遲初始化單例。在多執行緒環境下,簡單的懶漢式會有執行緒安全。懶漢式單例模式解決線性安全問題如下 1 使用雙重檢查鎖機制解決執行緒安全問題。2 單例模式還有更好的解決方案,即使用靜態類方式。懶漢式單例模式典型 p...