java中的6種單例寫法
在java中,單例有很多種寫法,面試時,手寫程式碼環節,除了寫演算法題,有時候也會讓手寫單例模式,這裡記錄一下單例的幾種寫法和優缺點。
1.初級寫法
2.加鎖
3.餓漢式
4.懶漢式
5.雙鎖檢驗
6.內部類

上面這種寫法,在併發環境下,會出現多個例項。
我們優化上面的程式碼,遇到併發,很容易想到加鎖,把獲取物件的方法加上關鍵字synchronized,很巧,這種寫法也稱為懶漢式單例 ,如下:

但是,顯然,我們把整個方法都同步了,效率很低下,我們可以繼續優化,只在建立例項的地方加上同步,參考5雙鎖檢驗。
餓漢式的特點是:類在載入時就直接初始化了例項。即使沒用到,也會例項化。

4.懶漢式
懶漢式的特點是:用到這個例項時才去呼叫方法例項化。這個和2中的看起來是一樣的,因為這個例項化方法加了synchronized ,這樣安全一些。

5.雙鎖檢驗
雙重非空判斷,new物件前加一次鎖。
volatile關鍵字,考慮的是,new關鍵字在虛擬機器中執行時其實分為很多步驟,具體原因可以參考深入理解java虛擬機器一書(考慮的是這個new關鍵字位元組碼執行時是非原子性的),而volatile關鍵字可以防止指令重排。

6.內部類

推薦一個交流學習群,裡面會分享一些資深架構師錄製的視訊錄影:有Spring,MyBatis,Netty原始碼分析,高併發、高效能、分散式、微服務架構的原理,JVM效能優化這些成為架構師必備的知識體系。還能領取免費的學習資源,目前受益良多
點選: ofollow,noindex">加入