單例模式的五種實(shí)現(xiàn)方式
1拭宁、餓漢式(線程安全洛退,調(diào)用效率高,但是不能延時(shí)加載):
一上來(lái)就把單例對(duì)象創(chuàng)建出來(lái)了杰标,要用的時(shí)候直接返回即可兵怯,這種可以說(shuō)是單例模式中最簡(jiǎn)單的一種實(shí)現(xiàn)方式。但是問(wèn)題也比較明顯腔剂。單例在還沒(méi)有使用到的時(shí)候媒区,初始化就已經(jīng)完成了。也就是說(shuō)掸犬,如果程序從頭到位都沒(méi)用使用這個(gè)單例的話袜漩,單例的對(duì)象還是會(huì)創(chuàng)建。這就造成了不必要的資源浪費(fèi)湾碎。所以不推薦這種實(shí)現(xiàn)方式宙攻。
2.懶漢式(線程安全,調(diào)用效率不高介褥,但是能延時(shí)加載):
3.Double CheckLock實(shí)現(xiàn)單例:DCL也就是雙重鎖判斷機(jī)制(由于JVM底層模型原因座掘,偶爾會(huì)出問(wèn)題,不建議使用):
4.靜態(tài)內(nèi)部類實(shí)現(xiàn)模式(線程安全柔滔,調(diào)用效率高溢陪,可以延時(shí)加載)
5.枚舉類(線程安全,調(diào)用效率高睛廊,不能延時(shí)加載形真,可以天然的防止反射和反序列化調(diào)用)
如何選用:
-單例對(duì)象 占用資源少,不需要延時(shí)加載超全,枚舉 好于 餓漢
-單例對(duì)象 占用資源多没酣,需要延時(shí)加載,靜態(tài)內(nèi)部類 好于 懶漢式