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

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

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

    zhyiwww
    用平實(shí)的筆,記錄編程路上的點(diǎn)點(diǎn)滴滴………
    posts - 536,comments - 394,trackbacks - 0
    老關(guān)者,吾同學(xué)也。哈哈,今天看他的博客,對單態(tài)模式又有了進(jìn)一步的理解。
    以前使用的單態(tài)模式,也能實(shí)現(xiàn),不過有個限制,看下面的代碼
    import java.util.*;
    class Singleton
    {
    private static Singleton instance;

    private Singleton()
    {
    }

    public static Singleton getInstance()
    {
    if (instance == null) //1
    instance = new Singleton(); //2
    return instance; //3
    }
    }
    這就是我們常使用的單態(tài)模式。
    現(xiàn)在,我們作一個假設(shè),如果兩個線程同時執(zhí)行此程序,都剛執(zhí)行完1,到2,還沒有之行,停住。
    此時
    thread1得到的instance是null
    thread2得到的instance也是null
    下面會如何呢?
    顯然,兩個線程會分別創(chuàng)建和初始化一個new Singleton()對象。
    那么,我們的單態(tài)還能實(shí)現(xiàn)單態(tài)的功能嗎?不能。
    不過,這是個特例,只有在多線程程序,同時兩個或多個線程都執(zhí)行到1還沒有執(zhí)行2的時候才能出現(xiàn)。也就是說,如果沒有實(shí)現(xiàn)方法的同步的話,上面的模式是不能保證生成一個實(shí)例的。
    如果是在非多線程的程序中就更不會出現(xiàn)這樣的問題。
    但是,些程序是一個嚴(yán)密的工作。所以,程序要在任何情況和平臺下都是正確的。

    希望,通過此文,你也能明白,為什么上面的單態(tài)模式是不安全的,為什么這種實(shí)現(xiàn)方法有生成多個實(shí)例的可能?
    想更深入的理解,請參考
    http://guanhw.blog.hexun.com/10653016_d.html


    |----------------------------------------------------------------------------------------|
                               版權(quán)聲明  版權(quán)所有 @zhyiwww
                引用請注明來源 http://www.tkk7.com/zhyiwww   
    |----------------------------------------------------------------------------------------|
    posted on 2008-02-15 13:27 zhyiwww 閱讀(879) 評論(2)  編輯  收藏 所屬分類: j2ee

    FeedBack:
    # re: 跟老關(guān)學(xué)單態(tài)模式
    2008-02-15 16:44 | honeyjava
    有必要用JCF中的類嗎,不知道你那個vector干什么用的,很沒意思。單例模式已經(jīng)不能再成熟了,double-check式的已經(jīng)被認(rèn)為是線程不安全的。  回復(fù)  更多評論
      
    # re: 跟老關(guān)學(xué)單態(tài)模式
    2008-02-18 16:21 | zhyiwww
    @honeyjava
    現(xiàn)在是我修改后的代碼。
    import java.util.*;
    class Singleton
    {
    private static Singleton instance;

    private Singleton()
    {
    }

    public static Singleton getInstance()
    {
    if (instance == null) //1
    instance = new Singleton(); //2
    return instance; //3
    }
    }
    當(dāng)時就是摘抄的一段代碼,只是為了能說明問題。
    不過,聽了您的說明,我對此模式有糊涂了。如果說上面的方法也是不安全的,那么哪一種方式是安全的呢?歡迎指導(dǎo)。  回復(fù)  更多評論
      
    主站蜘蛛池模板: 日本一区免费电影| 久久丫精品国产亚洲av| 免费91最新地址永久入口| 亚洲国产综合第一精品小说| 国产99视频精品免费视频7| 免费无码一区二区| 久久久亚洲裙底偷窥综合| 暖暖日本免费在线视频| 91免费国产视频| 亚洲综合在线一区二区三区| 超清首页国产亚洲丝袜| 人与禽交免费网站视频| 免费手机在线看片| 亚洲免费观看网站| 亚洲欧洲日产国码av系列天堂 | 亚洲精品av无码喷奶水糖心| 亚洲毛片av日韩av无码| 日本视频一区在线观看免费| 日韩在线观看免费完整版视频| 亚洲综合综合在线| 亚洲午夜av影院| 四虎成人精品一区二区免费网站| 国产一级a毛一级a看免费视频| 亚洲色偷偷偷综合网| 亚洲精品乱码久久久久久中文字幕 | 永久免费毛片在线播放| 99久久免费国产精精品| 久久综合久久综合亚洲| 亚洲人成在线影院| 久久精品亚洲乱码伦伦中文| 日韩一区二区a片免费观看 | 亚洲精品tv久久久久| 成人免费AA片在线观看| 免费人成视频在线观看网站| 成人福利在线观看免费视频| 2017亚洲男人天堂一| 亚洲福利视频一区二区三区| 亚洲精品无码成人片久久| 亚洲日本中文字幕一区二区三区| 噼里啪啦电影在线观看免费高清| 99久久综合精品免费 |