單例模式多線程
1、定義函數
定義:確保一個類只有一個實例,並提供一個全局訪問點。spa
理解:保證一個類只有一個實例的一種實現方法(該方法就是爲了下降對象之間的耦合度)。線程
2、代碼塊code
一、舉個栗子,拿多線程爲栗子,具體看代碼註釋。上代碼~對象
namespace 單例模式Test { public class TestClass { // 定義一個靜態變量來保存類的實例 private static TestClass Car; // 定義一個標識確保線程同步 private static readonly object locker = new object(); // 定義私有構造函數,使外界不能建立該類實例 private TestClass() {} /// <summary> /// 定義公有方法提供一個全局訪問點,同時你也能夠定義公有屬性來提供全局訪問點 /// </summary> /// <returns></returns> public static TestClass GetCar() { if (Car == null) { // 當第一個線程運行到這裏時,此時會對locker對象 "加鎖", // 當第二個線程運行該方法時,首先檢測到locker對象爲"加鎖"狀態,該線程就會掛起等待第一個線程解鎖 // lock語句運行完以後(即線程運行完以後)會對該對象"解鎖" lock (locker) { // 若是類的實例不存在則建立,不然直接返回 if (Car == null) { Car = new TestClass(); } } } return Car; } } }
2、總結blog
一、單例模式確保某個類只有一個實例,並且自行實例化並向整個系統提供這個實例同步
二、單例模式是經過private
限定,避免了類在外部被實例化class