07七種單例模式的線程安全,高性能和懶加載

七種實現單例模式的線程中只有

第五種:Volatile+Double-Check

第六種:Holder

第七種:enum

只有上面這三種,高效線程安全同時實現懶加載

1.餓漢式:可以保證多線程下的唯一實例,getInstance性能也比較高,無法懶加載

2.懶漢式:不能保證多線程下唯一性

3.懶漢式+同步方法:能保證唯一和懶加載,但是性能低下

4.Double-Check:(使用同步代碼塊,只有當實例爲null,才加鎖創建實例),能保證唯一和懶加載,也較高效,

                        但是在多線程的情況下可能拋出空指針異常(線程1得到鎖後創建instance實例,但是未創建conn和socket,線程2判斷instance不爲空,然後調用conn和socket方法,導致空指針異常)

5.5.Volatile+Double-check:double-check雖然設計巧妙,當時可能引起類變量實例化conn和socket發生在instance實例化後,而volatile關鍵字可以防止                                                      JVM在運行是重排序,保證順序性

6.Holder方式:(靜態內部類裏面定義了靜態的實例),既保證了懶加載,又保證了instance只被初始化一次(很像"懶加載式的餓漢式")

7.枚舉方式:(在很多優秀的源代碼中,可以看到枚舉實現單例的聲影),枚舉不允許繼承,且是線程安全只能 實例化一次

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章