<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 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

    singleton的一點疑問

    Posted on 2006-11-29 15:07 兵臨城下 閱讀(441) 評論(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,也就是說第一次調用時初始Singleton,不用每次都進行生成對象實例,提高了效率。
    我的疑問是:第一種形式每次通過Singleton.getInstance()就會多次生成實例嗎?instance 不是static的嗎,也只初始化一次啊!
    還有第二種形式中的synchronized 為什么是必須的?不明白,望指點!

    評論

    # re: singleton的一點疑問  回復  更多評論   

    2006-11-29 18:19 by jrobot_堪
    第一種形式也不會生成多個實例的,每次都是返回的類初始化時構造的對象
    第二種形式由于在調用方法時才生成實例并返回,考慮到可能多線程同時訪問這個方法時,可能生成多個實例的情況,必須加synchronized關鍵字讓方法變為同步,這樣同一時間只能一個線程執行這個方法.

    # re: singleton的一點疑問  回復  更多評論   

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

    # re: singleton的一點疑問  回復  更多評論   

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

    # re: singleton的一點疑問  回復  更多評論   

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

    # re: singleton的一點疑問  回復  更多評論   

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

    # re: singleton的一點疑問  回復  更多評論   

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

    # re: singleton的一點疑問  回復  更多評論   

    2006-12-10 05:07 by 小賀
    第一種是類加載時生成實例,第二種是調用方法時生成實例,生成實例也要占用內存影響效率,在需要的時候再生成實例,感覺第二種更有效率。
    主站蜘蛛池模板: 成人免费AA片在线观看| 最近免费中文字幕大全免费版视频 | 精品久久久久久国产免费了| 四虎影在线永久免费观看| 亚洲妇女熟BBW| 成年轻人网站色免费看| 亚洲成AV人片高潮喷水| 国产免费观看视频| 国产尤物在线视精品在亚洲| 国产一区二区三区免费视频| 麻豆一区二区三区蜜桃免费| 久久久青草青青国产亚洲免观 | 亚洲美国产亚洲AV| 国产91在线免费| 日本视频免费观看| 国产亚洲精品无码拍拍拍色欲| 免费视频精品一区二区| 亚洲综合熟女久久久30p| 国产午夜精品久久久久免费视 | 亚洲国产二区三区久久| 久久久久久精品免费免费自慰| 亚洲激情视频图片| 免费国产一级特黄久久| 中文字幕乱码系列免费| 亚洲视频中文字幕| 大学生美女毛片免费视频| 日韩精品免费一线在线观看| 亚洲精品午夜无码电影网| 国内精品免费麻豆网站91麻豆| 亚洲av无码一区二区三区四区| a级亚洲片精品久久久久久久| 免费国产黄网站在线观看视频| 亚洲成年网站在线观看| 亚洲国产精品视频| 91精品国产免费入口| 国产区图片区小说区亚洲区| 国产亚洲精品无码成人| 嫩草视频在线免费观看| 香蕉免费在线视频| 日韩亚洲国产综合高清| 亚洲AV无码成人网站久久精品大|