<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    日出星辰

    各種創(chuàng)建單例模式的優(yōu)缺點(diǎn)

    單例模式應(yīng)用于一個(gè)類只有一個(gè)實(shí)例的情況,并且為其實(shí)例提供一個(gè)全局的訪問點(diǎn)。

    特點(diǎn)

    1.一個(gè)類只有一個(gè)實(shí)例

    2.自己創(chuàng)建這個(gè)實(shí)例

    3.整個(gè)系統(tǒng)只能用這個(gè)實(shí)例

    應(yīng)用場(chǎng)景

    外部資源:每臺(tái)計(jì)算機(jī)有若干個(gè)打印機(jī),但只能有一個(gè)PrinterSpooler,以避免兩個(gè)打印作業(yè)同時(shí)輸出到打印機(jī)。

    內(nèi)部資源:大多數(shù)軟件都有一個(gè)(或多個(gè))屬性文件存放系統(tǒng)配置,這樣的系統(tǒng)應(yīng)該有一個(gè)對(duì)象管理這些屬性文件。

    實(shí)現(xiàn)方式

    1.餓漢式:?jiǎn)卫龑?shí)例在類裝載時(shí)就構(gòu)建,急切初始化。(預(yù)先加載法)

    /**
     * 餓漢式(推薦)
     *
     */
    public class Singleton1 {
    
    	private Singleton1() {
    	}
    
    	public static Singleton1 instance = new Singleton1();
    
    	public Singleton1 getInstance() {
    		return instance;
    	}
    
    }

    優(yōu)點(diǎn) 1.線程安全
    2.在類加載的同時(shí)已經(jīng)創(chuàng)建好一個(gè)靜態(tài)對(duì)象,調(diào)用時(shí)反應(yīng)速度快
    缺點(diǎn) 資源效率不高,可能getInstance()永遠(yuǎn)不會(huì)執(zhí)行到,但執(zhí)行該類的其他靜態(tài)方法或者加載了該類(class.forName),那么這個(gè)實(shí)例仍然初始化

     

    2.懶漢式:?jiǎn)卫龑?shí)例在第一次被使用時(shí)構(gòu)建,延遲初始化。

    class Singleton2 {
    	private Singleton2() {
    	}
    
    	public static Singleton2 instance = null;
    
    	public static Singleton2 getInstance() {
    		if (instance == null) {
                  //多個(gè)線程判斷instance都為null時(shí),在執(zhí)行new操作時(shí)多線程會(huì)出現(xiàn)重復(fù)情況
    			instance = new Singleton2();
    		}
    		return instance;
    	}
    }

    懶漢式在單個(gè)線程中沒有問題,但在多線程就可能會(huì)出現(xiàn)兩個(gè)或多個(gè)Singleton2實(shí)例情況,

    雖然后面實(shí)例化的Singleton2會(huì)覆蓋前面實(shí)例化的Singleton2,但最好避免這樣的情況。

    改進(jìn)方式就是加鎖synchornized

    class Singleton3 {
    	private Singleton3() {
    	}
    
    	public static Singleton3 instance = null;
    
    	public static synchronized Singleton3 getInstance() {
    		if (instance == null) {
    			instance = new Singleton3();
    		}
    		return instance;
    	}
    }
    優(yōu)點(diǎn) 資源利用率高,不執(zhí)行g(shù)etInstance()就不會(huì)被實(shí)例,可以執(zhí)行該類的其他靜態(tài)方法
    缺點(diǎn) 第一次加載時(shí)不夠快,多線程使用不必要的同步開銷大


    3.雙重檢測(cè)

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

    優(yōu)點(diǎn) 資源利用率高,不執(zhí)行g(shù)etInstance()就不被實(shí)例,可以執(zhí)行該類其他靜態(tài)方法
    缺點(diǎn) 第一次加載時(shí)反應(yīng)不快,由于java內(nèi)存模型一些原因偶爾失敗

     

    4.靜態(tài)內(nèi)部類

    class Singleton5 {
    	private Singleton5() {
    	}
    
    	private static class SingletonHelp {
    		static Singleton5 instance = new Singleton5();
    	}
    
    	public static Singleton5 getInstance() {
    		return SingletonHelp.instance;
    	}
    }

    優(yōu)點(diǎn) 資源利用率高,不執(zhí)行g(shù)etInstance()不被實(shí)例,可以執(zhí)行該類其他靜態(tài)方法
    缺點(diǎn) 第一次加載時(shí)反應(yīng)不夠快

     

    總結(jié):一般采用餓漢式(1),若對(duì)資源十分在意可以采用靜態(tài)內(nèi)部類(4),不建議采用懶漢式及雙重檢測(cè)(2、3)

    另外

    對(duì)于第二種可以采用volatile方式

    volatile用更低的代價(jià)代替同步

    解釋:同步的代價(jià)主要有覆蓋范圍決定,如果可以降低同步的覆蓋范圍,可大幅提升性能。

    而volatile覆蓋范圍是變量級(jí)別的,因此同步代價(jià)很低。

    volatile原理:告訴處理器,不要將其放入工作內(nèi)存,而是直接在主存操作。因此,當(dāng)多處理器或多線程在訪問該變量時(shí)

    都將直接操作主存,這在本質(zhì)上做到了變量共享。

    volation優(yōu)勢(shì):

    1.更大的程度吞吐量

    2.更少的代碼實(shí)現(xiàn)多線程

    3.程序伸縮性好

    4.比較好理解,無需太高的學(xué)習(xí)成本

    volatile不足:

    1.容易出問題

    2.比較難設(shè)計(jì)

    參考文獻(xiàn)

    http://yiminghe.iteye.com/blog/404334

    http://developer.51cto.com/art/201103/249322.htm

    posted on 2011-09-05 21:54 日出星辰 閱讀(3386) 評(píng)論(0)  編輯  收藏


    只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 亚洲免费在线视频观看| a级片免费在线播放| 0588影视手机免费看片| 亚洲av日韩av天堂影片精品| 中文字字幕在线高清免费电影| 亚洲精品456播放| 四虎成人精品国产永久免费无码 | 国产精品亚洲一区二区无码| 在线v片免费观看视频| 亚洲国产成人99精品激情在线| 青青在线久青草免费观看| 亚洲一区电影在线观看| 野花高清在线观看免费3中文| 亚洲国产精品成人综合久久久| 久久午夜免费视频| 亚洲欧好州第一的日产suv| 免费毛片网站在线观看| 在线精品自拍亚洲第一区| 自拍偷自拍亚洲精品第1页| 你是我的城池营垒免费观看完整版| 亚洲欧洲自拍拍偷午夜色无码| 免费人成黄页在线观看日本| 久久亚洲精品成人AV| 毛片网站免费在线观看| 国产亚洲精彩视频| 亚洲日本一区二区三区在线| 99精品视频在线视频免费观看| 亚洲制服丝袜在线播放| 99re在线这里只有精品免费| 国产亚洲情侣一区二区无| 久久精品国产亚洲av麻豆图片 | 热久久这里是精品6免费观看| 久久久久亚洲精品成人网小说| 日韩在线播放全免费| 久久精品国产亚洲AV蜜臀色欲| 免费中文字幕一级毛片| 免费一级毛片在线播放视频免费观看永久| 国产亚洲一区二区精品| 麻豆一区二区免费播放网站| 日日躁狠狠躁狠狠爱免费视频 | 中文文字幕文字幕亚洲色|