餓漢模式
image.png
- 特點:不管你用還是不用究反,反正我?guī)湍慵虞d出來,并且不會有線程安全問題保證了只有一份實例。
懶漢模式(非線程安全)
image.png
- 特點:實行了懶加載输枯,只有在你使用的時候才會幫你加載,但是在多線程情況下會有線程安全問題占贫。
懶漢模式(線程安全)
image.png
- 特點:實行了懶加載桃熄,并且線程安全
- 注意:這里的double check是比較經(jīng)典的,但是需要注意一定要使用volatile修飾實例的引用型奥,因為如果你不用volatile修飾瞳收,當你的構(gòu)造函數(shù)里去初始化一些比較重的內(nèi)容時,恰好另外一個線程拿著你未初始化完全的實例去調(diào)用厢汹,從而會導(dǎo)致空指針異常螟深,但是使用volatile可以有效的避免這一點。
靜態(tài)內(nèi)部類的形式
image.png
- 特點:即實行了懶加載烫葬,線程安全界弧,并且不需要加鎖凡蜻,代碼非常優(yōu)雅。
枚舉的形式
image.png
- 特點:在枚舉中我們明確了構(gòu)造方法限制為私有夹纫,在我們訪問枚舉實例時會執(zhí)行構(gòu)造方法咽瓷,同時每個枚舉實例都是static final類型的,也就表明只能被實例化一次舰讹,巧妙的使用的枚舉實現(xiàn)單利(Effective java最推薦的一種)