01.02 java中3中單例模式例子,第3種才是完美的絕對單例

面試

java面試官也經常面試這個單例模式,一般能說出

兩私一公就不錯了

java程序員平時開發用的少,但面試遇到多啊,也是有必要研究下的

什麼叫兩私一公

  1. 私有的構造函數
  2. 私有靜態實例屬性
  3. 公共的獲取實例的靜態方法

基礎知識點

多線程、線程安全、static、構造函數、枚舉

例子1

傳統單線程環境下

缺點:線程不安全

java中3中單例模式例子,第3種才是完美的絕對單例

例子2

  • 多線程下通過synchronized保證線程安全
  • 跟例子1就多了同步,實例初始過了就直接返回實例不用進入同步代碼塊了
  • 多重檢查鎖的方式去保證安全
  • 缺點:還是可以通過反射去創建實例,不完美啊
java中3中單例模式例子,第3種才是完美的絕對單例

例子3(完美)

利用枚舉的特性在JVM層保證絕對的單例

java中3中單例模式例子,第3種才是完美的絕對單例

為啥枚舉的單例就完美了?

枚舉本身是無法通過反射、克隆、反序列化等等把對象初始出來的。

枚舉底層原理我就不在這裡細說了。

總結

  • 搞懂兩私一公(面試的時候能說出第2個例子就可以)
  • 枚舉完美單例(能說出第3個例子就非常好)

java程序員、編程、後端開發


分享到:


相關文章: