實現執行緒安全的四種單例模式

2021-10-08 02:24:29 字數 1685 閱讀 2620

列舉實現(推薦)

「確保乙個類只有乙個例項,並提供乙個全域性訪問點來訪問這個唯一的例項。」

單例模式有3個要點:

根據這三個要點可知,類的建構函式私有化,並且在單例類中建立唯一的例項,最後提供靜態方法供外部共享訪問唯一的例項。

/**

* 餓漢式

*/public

class

eagersingleton

public

static eagersingleton getinstance()

}

優點:

缺點:

/**

* 懶漢式(雙重檢查)

*/public

class

lazysingleton

public

static lazysingleton getinstance()

}}return instance;

}}

優點:

缺點:

public

class

staticinnersingleton

// 單例持有者

private

static

class

instanceholder

public

static staticinnersingleton getinstance()

}

以上面的懶漢式為例

public

static

void

main

(string[

] args)

catch

(exception e)

}

通過反射的方式獲取的物件s1:lazysingleton@5e9f23b4

通過反射的方式獲取的物件s2:lazysingleton@4783da3f

新增成員變數flag判斷

public

class

lazysingleton

else}}

public

static lazysingleton getinstance()

}}return instance;

}}

在實現序列化介面serializable後,就會出現反序列化破壞單例的情況,直接在單例類中新增readresolve()方法。

/**

* 反序列化時該方法會直接使用已有的instance例項覆蓋反序列化出來的例項

* 從而防止反序列化生成新的物件

*/private object readresolve()

throws objectstreamexception

public

class

enumsingleton

private enumsingleton getinstance()

}public

static enumsingleton getinstance()

}

優點:

單例模式的四種執行緒安全的實現

1.懶漢經典模式,用互斥鎖實現 include include include class csingletonlock void lock void unlock class csingleton public static pthread mutex t m mutex static csing...

單例模式 四種

餓漢式 單例模式 餓漢式類載入到記憶體後,例項化乙個單例,jvm保證執行緒安全 都不能建立新的,所以安全,多執行緒都是安全的 簡單易用 缺點 不管是否用到,類載入時候就會例項化,浪費 一般專案開發中載入是用的class.forname 將class載入到記憶體,但不例項化,此時,如果使用餓漢,就會消...

python四種實現單例模式

coding utf 8 author xianyt date 2018 func 在預設的情況下建立多個物件的id不相同,如果想要設定為單例模式,可以通過 new 方法中的 instance 在 new 方法中把類例項繫結到類變數 instance上,如果cls.instance為none表示該類...