單例模式總結

2022-07-01 09:09:09 字數 1407 閱讀 8447

1、餓漢式:在程式啟動或單例模式類被載入的時候,單例模式例項就已經被建立。(執行緒安全,呼叫率高,但是,不能延遲載入。)

2、懶漢式:當程式第一次訪問單例模式例項時才進行建立。(執行緒安全,呼叫效率不高,可以延時載入。)

如何選擇:如果單例模式例項在系統中經常會被用到,餓漢式是乙個不錯的選擇。餓漢式無需關注多執行緒問題、寫法簡單明瞭、能用則用。

反之如果單例模式在系統中會很少用到或者幾乎不會用到,那麼懶漢式是乙個不錯的選擇。

其他:

1.雙重檢測鎖式(由於jvm底層內部模型原因,偶爾會出問題,不建議使用)

2.靜態內部類式(執行緒安全,呼叫效率高。但是,可以延時載入)

3.列舉式(執行緒安全,呼叫率高,不能延時載入)

如何選用:

——單例物件 占用資源少,不需要 延時載入

列舉式 好於 餓漢式

——單例物件 占用資源大,需要延時載入

靜態內部類式 好於 懶漢式

1、餓漢式:

public

class

singleton

public

static singleton getinstance()

}

2、懶漢式:

public

class

singleton

return

singleton;

}}

3、雙重檢查

public

class

singleton

public

static

singleton getinstance() }}

return

singleton;

}}

4、靜態內部類

public

class

singleton

private

static

class

singletoninstance

public

static

singleton getinstance()

}

5、列舉

public

enum

singleton

}

借助jdk1.5中新增的列舉來實現單例模式。不僅能避免多執行緒同步問題,而且還能防止反序列化重新建立新的物件。可能是因為列舉在jdk1.5中才新增,所以在實際專案開發中,很少見人這麼寫過。

單例模式總結

三種實現單例模式的對比 1.volatile關鍵字不但可以防止指令重排,也可以保證執行緒訪問的變數值是 主記憶體中的最新值 有關volatile的詳細原理,我在以後的漫畫中會專門講解。2.使用列舉實現的單例模式,不但可以防止利用反射強行構建單例物件 可以而且在列舉類物件被 反序列化 的時候,保證反序...

單例模式總結

單例模式的使用有乙個必要的條件,在乙個系統要求乙個類只有乙個例項時才應當使用單例模式。在懶漢式單例的時候為什麼要進行執行緒的控制呢?package 單例模式.懶漢模式 public class lazysingleton synchronized public lazysingleton getin...

單例模式總結

一 單例模式 singleton pattern 單例模式只涉及到乙個單一的類,該類負責建立自己的物件,同時確保只有單個物件被建立。並且提供了訪問其唯一物件的方式,可以直接訪問,不需要在外部例項化該類的物件。1 單例模式可總結為以下三點 1 構造方法使用private私有化 保證外部無法new出例項...