單例模式各種實現方式的比較

2021-08-21 11:19:38 字數 1558 閱讀 5169

一、餓漢式單例模式:

型別1:

/**

* 餓漢式單例(可用):使用靜態常量,這會保證在類載入時

* 就初始化乙個a的例項,並且避免了執行緒安全問題。

* 但是有可能該例項永遠不會被用到而導致浪費記憶體。

*/public class a

public a getinstance()

}

型別2:

/**

* 餓漢式單例模式(可用):跟a型別,只不過初始化自身

* 例項的過程改到靜態塊裡面執行.

*/public class b

private b(){}

public b getintance()

}

二、懶漢式單例模式:

型別1:

/**

* 懶漢式單例模式(執行緒不安全,多執行緒不可用):雖然解決了a、b

* 兩種方式浪費記憶體的缺點,但是該方式只適用於單執行緒,多執行緒下

* 有個能出 現併發安全問題,導致建立多個例項。

*/public class c

public static c getinstance()

return instance;

}}

型別2:

/**

* 發安全問題,但是效率較低,每乙個想要獲取該類例項的執行緒

* 都需要其他執行緒釋放該方法對應的鎖才能獲取例項。

*/public class d

private synchronized static d getinstance()

return instance;

}}

型別3:

/**

* 懶漢式單例模式(同步**塊,不可用):雖然效率比d方式

*/public class e

public static e getinstance()

} return instance;

}}

型別4:

/**

* 懶漢式單例模式(雙重檢查,推薦用):該方式既解決了餓漢式單例模式

* 可能浪費記憶體空間的問題,有解決了執行緒安全的問題,並且效率比同

* 步方法高。

*/public class f

public static f getinstance()

}} return instance;

}}

型別5:

/**

* 靜態內部類(推薦用):整體實現是懶載入,但是裡面具體的實現

* 優勢利用餓漢式載入的原來(利用類載入時例項化的方式避免

* 了執行緒安全問題)。

*/public class g

private static class singletoninstance

public static g getinstance()

}

單例模式實現方式比較

單例模式實現方式 執行緒安全 延遲載入 反射安全 序列化安全 餓漢模式 懶漢模式 非空判斷 懶漢模式 方法加鎖 懶漢模式 雙重檢查鎖 靜態內部類 列舉 餓漢 author zhouxiaobing public class singleton implements serializable priv...

單例模式的幾種實現方式比較

首先上乙個最簡單的demo public class singleton private static singleton instance new singleton public static singleton getinstance public static void createstri...

單例模式各種實現詳解

餓漢模式 安全,但是無法實現懶載入 public class hungersingleton 懶漢單例 多執行緒會出現多個例項,需要優化 能夠實現懶載入 public class lazymansingleton public static lazymansingleton getinstance ...