1、餓漢式:在程式啟動或單例模式類被載入的時候,單例模式例項就已經被建立。(執行緒安全,呼叫率高,但是,不能延遲載入。)
2、懶漢式:當程式第一次訪問單例模式例項時才進行建立。(執行緒安全,呼叫效率不高,可以延時載入。)
如何選擇:如果單例模式例項在系統中經常會被用到,餓漢式是乙個不錯的選擇。餓漢式無需關注多執行緒問題、寫法簡單明瞭、能用則用。
反之如果單例模式在系統中會很少用到或者幾乎不會用到,那麼懶漢式是乙個不錯的選擇。
其他:
1.雙重檢測鎖式(由於jvm底層內部模型原因,偶爾會出問題,不建議使用)
2.靜態內部類式(執行緒安全,呼叫效率高。但是,可以延時載入)
3.列舉式(執行緒安全,呼叫率高,不能延時載入)
如何選用:
——單例物件 占用資源少,不需要 延時載入
列舉式 好於 餓漢式
——單例物件 占用資源大,需要延時載入
靜態內部類式 好於 懶漢式
1、餓漢式:
publicclass
singleton
public
static singleton getinstance()
}
2、懶漢式:
publicclass
singleton
return
singleton;
}}
3、雙重檢查
publicclass
singleton
public
static
singleton getinstance() }}
return
singleton;
}}
4、靜態內部類
publicclass
singleton
private
static
class
singletoninstance
public
static
singleton getinstance()
}
5、列舉
publicenum
singleton
}
借助jdk1.5中新增的列舉來實現單例模式。不僅能避免多執行緒同步問題,而且還能防止反序列化重新建立新的物件。可能是因為列舉在jdk1.5中才新增,所以在實際專案開發中,很少見人這麼寫過。
單例模式總結
三種實現單例模式的對比 1.volatile關鍵字不但可以防止指令重排,也可以保證執行緒訪問的變數值是 主記憶體中的最新值 有關volatile的詳細原理,我在以後的漫畫中會專門講解。2.使用列舉實現的單例模式,不但可以防止利用反射強行構建單例物件 可以而且在列舉類物件被 反序列化 的時候,保證反序...
單例模式總結
單例模式的使用有乙個必要的條件,在乙個系統要求乙個類只有乙個例項時才應當使用單例模式。在懶漢式單例的時候為什麼要進行執行緒的控制呢?package 單例模式.懶漢模式 public class lazysingleton synchronized public lazysingleton getin...
單例模式總結
一 單例模式 singleton pattern 單例模式只涉及到乙個單一的類,該類負責建立自己的物件,同時確保只有單個物件被建立。並且提供了訪問其唯一物件的方式,可以直接訪問,不需要在外部例項化該類的物件。1 單例模式可總結為以下三點 1 構造方法使用private私有化 保證外部無法new出例項...