面試
java面試官也經常面試這個單例模式,一般能說出
兩私一公就不錯了java程序員平時開發用的少,但面試遇到多啊,也是有必要研究下的
什麼叫兩私一公
- 私有的構造函數
- 私有靜態實例屬性
- 公共的獲取實例的靜態方法
基礎知識點
多線程、線程安全、static、構造函數、枚舉
例子1
傳統單線程環境下
缺點:線程不安全
![java中3中單例模式例子,第3種才是完美的絕對單例](http://p2.ttnews.xyz/loading.gif)
例子2
- 多線程下通過synchronized保證線程安全
- 跟例子1就多了同步,實例初始過了就直接返回實例不用進入同步代碼塊了
- 多重檢查鎖的方式去保證安全
- 缺點:還是可以通過反射去創建實例,不完美啊
![java中3中單例模式例子,第3種才是完美的絕對單例](http://p2.ttnews.xyz/loading.gif)
例子3(完美)
利用枚舉的特性在JVM層保證絕對的單例
為啥枚舉的單例就完美了?
枚舉本身是無法通過反射、克隆、反序列化等等把對象初始出來的。
枚舉底層原理我就不在這裡細說了。
總結
- 搞懂兩私一公(面試的時候能說出第2個例子就可以)
- 枚舉完美單例(能說出第3個例子就非常好)
java程序員、編程、後端開發
閱讀更多 程序汪汪 的文章