1. 程式人生 > >Java中四種常見的單例模式以及各自優缺點總結

Java中四種常見的單例模式以及各自優缺點總結

餓漢式實現:
餓漢式單例模式程式碼中,static變數會在類裝載時初始化,此時也不會涉及多個執行緒物件訪問該物件的問題。虛擬機器保證只會裝載一次該類,肯定不會發生併發訪問的問題。因此,可以省略synchronized關鍵字。問題:如果只是載入本類,而不是呼叫getInstance(),甚至永遠沒有呼叫,則會造成資源浪費!


懶漢式(單例物件延時載入):
要點:lazy load!  延時載入,懶載入!真正用的時候才載入!
問題:資源利用率高了。但是,每次呼叫getInstance()方法都要同步,併發效率低。


靜態內部類實現方式(也是一種懶載入方式):
要點:外部類沒有static屬性,則不會像餓漢式那樣立即載入物件。
只有真正呼叫getInstance(),才會載入靜態內部類。載入類時是執行緒安全的。instance是static final型別,保證了記憶體中只有這樣一個例項存在,而且只能被賦值一次,從而保證了執行緒安全性兼備了併發高效呼叫和延遲載入的優勢!

列舉式:

執行緒安全、呼叫效率高,但不能延時載入,並且可以天然的防止反射和反序列化漏洞!



單例物件 佔用資源少,不需要延時載入:
列舉式 好於餓漢式
單例物件 佔用資源大,需要延時載入:
靜態內部類式好於懶漢式