日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

聊聊这8种单例模式的优缺点

發布時間:2024/1/8 编程问答 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 聊聊这8种单例模式的优缺点 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?

1.什么是單例模式?

?

????當我們new一個對象時會幫我們申請內存地址,每一次去new的時候都會構建不同的地址,而單例模式就是每次獲取的實例化對象都保證是同一份。常見的單例模式有8種寫法,每一種單例模式都有自己的優缺點,下面讓我們來看看這8種單例模式。

?

1.餓漢模式(推薦)

?

?

????優點:當類加載到內存后就實例化一個單例,由Jvm保證線程安全,寫法超級簡單;實際開發中也不會在意是否一定要使用了才進行加載。

????缺點:可通過反射和反序列化進行更改,不管是否使用,只要類加載時就會完成實例化。

?

2.餓漢模式變形(推薦)

?

?

????這種方式實際上只是餓漢模式的一種變形寫法,加載類時由于只會執行一次靜態代碼塊來初始化實例。

?

3.懶漢模式寫法1(不推薦)

?

?

????優點:解決了只有在使用時才進行實例化單例

????缺點:可通過反射和反序列化進行更改,不能多線程環境下使用,線程不安全,當存在多線程環境下時,若第一個線程進入判斷singleton為null,當還未進行初始化單例對象時,第二個線程此時判斷singleton也為空,所以會繼續進行初始化單例對象,此時兩次返回的單例實際上并不是同一個。

?

4.懶漢模式寫法2(不推薦)

?

?

????優點:解決了只有在使用時才進行實例化單例,同時保證線程安全。

????缺點:可通過反射和反序列化進行更改;通過對方法上進行synchronized關鍵字進行加鎖,但是由于鎖的力度過大,每次都需要進行加鎖,即使singleton已經不為空時。

?

5.懶漢模式寫法3(不推薦)

?

?

????優點:解決了只有在使用時才進行實例化單例

????缺點:可通過反射和反序列化進行更改,線程不安全,多線程環境下使用時,若第一個線程進入判斷singleton為null,然后拿到鎖,當還未進行初始化單例對象時,第二個線程此時判斷singleton也為空,所以會繼續進行初始化單例對象,此時兩次返回的單例實際上并不是同一個。

?

6.懶漢模式DCL(推薦

?

?

????優點:解決了只有在使用時才進行實例化單例,線程安全,需要注意的是成員變量singleton必須加volatile關鍵字,防止指令重排序。

????缺點:可通過反射和反序列化進行更改。

?

7.靜態內部類(推薦

?

?

????優點:解決了只有在使用時才進行實例化單例,線程安全,這種方式跟餓漢式方式采用的機制類似,但又有不同。兩者都是采用了類裝載的機制來保證初始化實例時只有一個線程。不同的地方在餓漢式方式是只要Singleton類被裝載就會實例化,而靜態內部類的是調用getInstance時才會加載。

????缺點:可通過反射和反序列化進行更改。

?

8.枚舉單例(推薦)

?

?

????枚舉單例是出自Effective Java的作者,利用JDK枚舉的特性進行實現的。

????優點:解決了只有在使用時才進行實例化單例,線程安全,同時不能夠被反序列化,以及利用反射進行破壞。

????缺點:確實沒什么缺點,唯一的缺點就是看著有點奇怪~

?

有什么問題,掃碼關注我的微信公眾號第一時間聯系到我。同時可以第一時間收到我的原創文章

?

總結

以上是生活随笔為你收集整理的聊聊这8种单例模式的优缺点的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。