国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發(fā)設(shè)計 > 正文

java設(shè)計模式之單例模式

2019-11-14 09:58:01
字體:
供稿:網(wǎng)友

單例模式:確保一個類只有一個實例,并提供一個全局訪問點。

1、懶漢模式:

public class singleton { PRivate static singleton mSingleton; private singleton(){} public static singleton getInstance(){ if (mSingleton == null) { mSingleton = new singleton(); } return mSingleton; }}

通過singleton mSingleton = singleton.getInstance();來獲取singleton的實例。這種模式是在需要的時候才會創(chuàng)建,如果在多線程中使用,會導(dǎo)致創(chuàng)建多個實例,這時候需要用同步鎖來確保只有一個實例。

2、同步鎖模式:

public class singleton { private static singleton mSingleton; private singleton(){} public static synchronized singleton getInstance(){ if (mSingleton == null) { mSingleton = new singleton(); } return mSingleton; }}

雖然同步鎖可以解決多個實例的問題,但是在使用過程中,每次調(diào)用實例,都需要同步,對程序的性能來說有很大影響,有沒有辦法解決這個問題呢,答案是肯定的,“雙重檢查加鎖”模式可以減少使用同步。

3、雙重檢查加鎖模式:

public class singleton { private static singleton mSingleton; private singleton(){} public static singleton getInstance(){ if (mSingleton == null) { synchronized (singleton.class) { if (mSingleton == null) { mSingleton = new singleton(); } } } return mSingleton; }}

4、惡漢模式:

public class singleton { private static singleton mSingleton = new singleton(); private singleton(){} public static singleton getInstance(){ return mSingleton; }}

Singleton實例在singleton類加載的時候就實例化,這種方式是最簡單的方式,并且不存在多個實例的情況,也沒有線程同步的問題,缺點是即使沒有使用該單例,它也會在類加載時被創(chuàng)建,浪費內(nèi)存。

5、靜態(tài)內(nèi)部類:

public class singleton { private static class singletonHolder{ private static singleton mSingleton = new singleton(); } private singleton(){} public static singleton getInstance(){ return singletonHolder.mSingleton; }}

這種方式同樣利用了類加載機制來保證只創(chuàng)建一個instance實例。它與餓漢模式一樣,也是利用了類加載機制,因此不存在多線程并發(fā)的問題。不一樣的是,它是在內(nèi)部類里面去創(chuàng)建對象實例。這樣的話,只要應(yīng)用中不使用內(nèi)部類,JVM就不會去加載這個單例類,也就不會創(chuàng)建單例對象,從而實現(xiàn)懶漢式的延遲加載。也就是說這種方式可以同時保證延遲加載和線程安全。

6、枚舉:

public enum singleton{ instance; private singleton(){}}

java中,為了強制只實例化一個對象,最好的方法是使用一個枚舉量。


上一篇:ssh 常見面試題

下一篇:ChucK初步(2)

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 湘潭县| 丰台区| 明光市| 宁河县| 漳州市| 湄潭县| 天水市| 禄劝| 凤山市| 龙泉市| 襄樊市| 麟游县| 盱眙县| 万年县| 德格县| 德昌县| 衡阳市| 淮北市| 清水河县| 通许县| 象山县| 连山| 宜宾县| 清丰县| 桐梓县| 新乐市| 抚顺县| 武夷山市| 图木舒克市| 碌曲县| 阳高县| 宁晋县| 乐清市| 两当县| 安多县| 蕲春县| 扎赉特旗| 西畴县| 科技| 建平县| 邢台县|