單例模式實現對比
參考連結: 單例模式
一、實現對比
推薦指數 | 實現方式 | 多執行緒安全 | Lazy初始化 | 實現難度 | 記憶體消耗 | 執行效率 | JDK版本 |
---|---|---|---|---|---|---|---|
**** | 列舉 | 是 | 否 |
易 | 良 |
高 | 1.5+ |
**** | 餓漢式 | 是 | 否 |
易 | 良 |
高 | - |
*** | 靜態內部類 | 是 | 是 | 一般 |
優 | 高 | - |
** | 雙檢鎖/雙重校驗鎖(DCL) | 是 | 是 | 複雜 |
優 | 高 | 1.5+ |
* | 懶漢式(非執行緒安全) | 否 |
是 | 易 | 優 | 高 | - |
* | 懶漢式(執行緒安全) | 是 | 是 | 易 | 優 | 極低 |
- |
二、實現方式
懶漢式(非執行緒安全)
public class Singleton {
private static Singleton instance;
private Singleton (){}
public static Singleton getInstance() {
if (instance == null) {
instance = new Singleton();
}
return instance;
}
}
懶漢式(執行緒安全)
public class Singleton {
private static Singleton instance;
private Singleton (){}
public static synchronized Singleton getInstance() {
if (instance == null) {
instance = new Singleton();
}
return instance;
}
[推薦] 餓漢式
public class Singleton {
private static Singleton instance = new Singleton();
private Singleton (){}
public static Singleton getInstance() {
return instance;
}
}
Classloder機制避免了多執行緒的同步問題
雙檢鎖/雙重校驗鎖(DCL)
public class Singleton {
private volatile static Singleton singleton;
private Singleton (){}
public static Singleton getSingleton() {
if (singleton == null) {
synchronized (Singleton.class) {
if (singleton == null) {
singleton = new Singleton();
}
}
}
return singleton;
}
}
[推薦] 靜態內部類
public class Singleton {
private static class SingletonHolder {
private static final Singleton INSTANCE = new Singleton();
}
private Singleton (){}
public static final Singleton getInstance() {
return SingletonHolder.INSTANCE;
}
}
Classloder機制避免了多執行緒的同步問題
[推薦] 列舉
public enum Singleton {
INSTANCE;
public static Singleton getInstance() {
return INSTANCE;
}
public void method() {
}
}
相關文章
- C# 單例模式的實現和效能對比C#單例模式
- PHP實現單例模式PHP單例模式
- golang實現單例模式Golang單例模式
- Rust實現單例模式Rust單例模式
- 說說你對單例模式的理解?如何實現?單例模式
- C++中單例模式和static的對比C++單例模式
- 單例模式c++實現單例模式C++
- Python中實現單例模式Python單例模式
- 單例模式 – 單例登錄檔與 Spring 實現單例剖析單例模式Spring
- DCL單例模式中的缺陷及單例模式的其他實現單例模式
- JS中的單例模式及單例模式原型類的實現JS單例模式原型
- 【php實現設計模式】之單例模式PHP設計模式單例
- 用Python實現設計模式——單例模式Python設計模式單例
- 利用static來實現單例模式單例模式
- 單例模式:5種實現方式單例模式
- 單例模式的各種實現單例模式
- 單例模式的幾種實現And反射對其的破壞單例模式反射
- Go 實現常用設計模式(一)單例模式Go設計模式單例
- Java 利用列舉實現單例模式Java單例模式
- 單例模式的 Java 實現與思考單例模式Java
- 五種方式實現 Java 單例模式Java單例模式
- Python 5種方法實現單例模式Python單例模式
- Python 實現工廠模式、抽象工廠,單例模式Python模式抽象單例
- 設計模式:單例模式的使用和實現(JAVA)設計模式單例Java
- 設計模式學習-使用go實現單例模式設計模式Go單例
- Java 實現單例模式的 9 種方法Java單例模式
- Python單例模式(Singleton)的N種實現Python單例模式
- 單例模式的各種實現方式(Java)單例模式Java
- JS實現單例模式的多種方案JS單例模式
- 美團一面:會單例模式嗎,寫個單例看看?(8大單例模式實現方式總結)單例模式
- 你真的會寫單例模式嗎——Java實現單例模式Java
- C++ std::call_once 實現單例模式C++單例模式
- python如何實現單例模式?常用方法彙總!Python單例模式
- 使用sync.Once實現高效的單例模式單例模式
- Java設計模式——實現單例模式的七種方式[JZOF]Java設計模式單例
- Python實現簡單的excel對比工具PythonExcel
- JAVA中實現單例(Singleton)模式的八種方式Java單例模式
- PHP 單例模式優點意義及如何實現PHP單例模式