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

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

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

        明月松間照 清泉石上流


                                            ——— 兵臨城下   貓科動物
    posts - 70, comments - 137, trackbacks - 0, articles - 23
      BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

    singleton的一點(diǎn)疑問

    Posted on 2006-11-29 15:07 兵臨城下 閱讀(442) 評論(7)  編輯  收藏 所屬分類: Java EE
    一般Singleton模式通常有幾種形式:
    第一種形式:

    public class Singleton {

      private Singleton(){}

      private static Singleton instance = new Singleton();

      public static Singleton getInstance() {
        return instance;   
       }
    }

    第二種形式:

    public class Singleton {

      private static Singleton instance = null;
    ?????????
    ????????private Singleton(){}

      public static synchronized Singleton getInstance() {

      if (instance==null)
        instance=new Singleton();
      return instance;   }

    }

    都說第二種形式是lazy initialization,也就是說第一次調(diào)用時初始Singleton,不用每次都進(jìn)行生成對象實(shí)例,提高了效率。
    我的疑問是:第一種形式每次通過Singleton.getInstance()就會多次生成實(shí)例嗎?instance 不是static的嗎,也只初始化一次啊!
    還有第二種形式中的synchronized 為什么是必須的?不明白,望指點(diǎn)!

    評論

    # re: singleton的一點(diǎn)疑問  回復(fù)  更多評論   

    2006-11-29 18:19 by jrobot_堪
    第一種形式也不會生成多個實(shí)例的,每次都是返回的類初始化時構(gòu)造的對象
    第二種形式由于在調(diào)用方法時才生成實(shí)例并返回,考慮到可能多線程同時訪問這個方法時,可能生成多個實(shí)例的情況,必須加synchronized關(guān)鍵字讓方法變?yōu)橥?這樣同一時間只能一個線程執(zhí)行這個方法.

    # re: singleton的一點(diǎn)疑問  回復(fù)  更多評論   

    2006-11-29 21:56 by 兵臨城下
    哦!線程安全!懂了,那相比而言,第一種形式是比較安全的。
    那第二種形式并不比第一種形式效率高啊,怎么說是提高了效率呢?

    # re: singleton的一點(diǎn)疑問  回復(fù)  更多評論   

    2006-11-30 02:59 by jrobot[匿名]
    個人感覺對一般的程序普通的這兩種寫法都是可以的
    至于效率,應(yīng)該是第一種高些,因為沒有同步,不過也可能會有問題
    這有一篇文章,超詳細(xì)的米仔細(xì)看- -,你感興趣去研究吧
    http://m.tkk7.com/dreamstone/archive/2006/11/04/79026.aspx

    # re: singleton的一點(diǎn)疑問  回復(fù)  更多評論   

    2006-11-30 09:24 by 兵臨城下
    謝了,太復(fù)雜了,字節(jié)碼分析!
    以后就用第一種形式了!

    # re: singleton的一點(diǎn)疑問  回復(fù)  更多評論   

    2006-11-30 18:42 by Zou Ang
    我覺得是因為第一種方式會在類加載的時候就初始化instance,而第二種會在使用時初始化,中間有一段時間不用吧~~

    # re: singleton的一點(diǎn)疑問  回復(fù)  更多評論   

    2006-11-30 19:58 by 兵臨城下
    不對吧,這兩個單態(tài)類只能通過Singleton.getInstance()來創(chuàng)建對象,所以應(yīng)該都是調(diào)用時才初始化,不存在你所說的情況!

    # re: singleton的一點(diǎn)疑問  回復(fù)  更多評論   

    2006-12-10 05:07 by 小賀
    第一種是類加載時生成實(shí)例,第二種是調(diào)用方法時生成實(shí)例,生成實(shí)例也要占用內(nèi)存影響效率,在需要的時候再生成實(shí)例,感覺第二種更有效率。
    主站蜘蛛池模板: 亚洲一区无码精品色| 国产AV无码专区亚洲AV麻豆丫| 午夜男人一级毛片免费 | 成人性生交大片免费看好| 亚洲国产精品一区二区三区在线观看| 国内精品99亚洲免费高清| 日本高清免费中文字幕不卡| 在免费jizzjizz在线播| 中文字幕乱码一区二区免费| 男女猛烈xx00免费视频试看| 亚洲午夜在线播放| 99视频精品全部免费观看| 亚洲粉嫩美白在线| 久久亚洲精品无码aⅴ大香| 成年性羞羞视频免费观看无限| 国产猛男猛女超爽免费视频| 校园亚洲春色另类小说合集| 亚洲人成色777777精品| 亚洲国产精品美女| 亚洲精品亚洲人成在线观看下载| 精品免费tv久久久久久久| igao激情在线视频免费| 久久久青草青青亚洲国产免观| 亚洲国产精品毛片av不卡在线| 永久黄网站色视频免费| 久久久www成人免费毛片 | 亚洲成AV人片一区二区| 国产国拍精品亚洲AV片| 亚洲精品偷拍视频免费观看| 午夜亚洲av永久无码精品| 少妇无码一区二区三区免费| a级在线观看免费| a视频免费在线观看| 两个人www免费高清视频| h片在线播放免费高清| 亚洲视频在线一区| 少妇高潮太爽了在线观看免费| 四虎精品亚洲一区二区三区| 免费无码av片在线观看| 久久久久久久国产免费看| 亚洲人成7777影视在线观看|