單例模式特點:
單例模式應用場景:
單例模式型別:
優點:一開始就建立例項,執行緒安全缺點:佔記憶體,耗資源
public class singleton
//建立公有靜態例項
public static singleton getinstance()
優點:呼叫例項靜態方法時,沒有建立例項,再建立;合理利用資源,減少資源浪費缺點:可能會引起執行緒衝突,不安全
public class singleton
//建立公有靜態例項
public static singleton getinstance()
return uniqueinstance;
}
public class singleton
//建立公有靜態例項,注意在例項方法前加了synchronized
public synchronized static singleton getinstance()
return uniqueinstance;
}
但是這樣每個進來的執行緒都加鎖後再判斷例項是否已經存在,然而加鎖的次數越多,**執行效能越慢,所以為了減少不必要的加鎖次數,進行再次優化。優化2:減少加鎖次數
public class singleton
//建立公有靜態例項,注意在例項方法前加了synchronized
public static singleton getinstance() }}
return uniqueinstance;
}
二次優化後,當例項已經存在的時候就直接返回例項,提高了**執行效能,且執行緒安全。
登記式單例模式用的不多,它主要是對一組單例模式進行的維護,主要是在數量上的擴充套件通過map我們把單例存進去,這樣在呼叫時,先判斷該單例是否已經建立,是的話直接返回,不是的話建立乙個登記到map中,再返回。對於數量又分為固定數量和不固定數量的。下面採用的是不固定數量的方式,在getinstance方法中加上引數(string name)。然後通過子類繼承,重寫這個方法將name傳進去。讓我們看看**吧。(引用
public class singleton3
//protected型別的預設構造子
protected singleton3(){}
//靜態工廠方法,返還此類惟一的例項
public static singleton3 getinstance(string name)
if(map.get(name) == null) catch (instantiationexception e) catch (illegalacces***ception e) catch (classnotfoundexception e)
}return map.get(name);
} ....
}
單例模式多執行緒 加鎖
單例模式的多執行緒 比如使用者點選 程式正在操作這條資料的過程中 然後又有乙個人點選 又把這條資料修改了 多執行緒會發生的問題 這時候 當第乙個使用者點選後 應該給這個方法上鎖 通常new乙個object物件 把執行的 放到lock中 lock裡面的方法塊只有乙個執行緒可以進入 第二個執行緒需要等待...
單例模式加鎖與不加鎖例項C
1 教科書裡的單例模式 我們都很清楚乙個簡單的單例模式該怎樣去實現 建構函式宣告為private或protect防止被外部函式例項化,內部儲存乙個private static的類指標儲存唯一的例項,例項的動作由乙個public的類方法代勞,該方法也返回單例類唯一的例項。上 12 3 4 5 6 7 ...
優化單例模式
單例模式 用於產生物件的具體例項,可以確保系統中乙個類只產生乙個例項。好處是,省略建立物件所花費的時間 減少系統記憶體的使用率,降低gc壓力,縮短gc停頓時間。餓漢模式 public class singleton private static singleton instance new sing...