DANCE WITH JAVA

          開發出高質量的系統

          常用鏈接

          統計

          積分與排名

          好友之家

          最新評論

          終于可以在Java中使用lazy loading的單態了

          在我的這篇文章http://www.aygfsteel.com/dreamstone/archive/2006/11/04/79026.html中寫了為什么不要使用Java的lazy loading ,即使是double-check也解決不了問題,但是有人解決了這個問題。
          佩服啊。實在是巧妙,如此簡單
          注意:在多個虛擬機的情況下這個方法還是不能用的,但是一般情況下是可以的。
          實現方式:

          public   class  Singleton  {   
            
            
          static   class  SingletonHolder  {   
              
          static  Singleton instance  =   new  Singleton();   
            }
             
            
            
          public   static  Singleton getInstance()  {   
              
          return  SingletonHolder.instance;   
            }
             
            
          }
            

          這個寫法的發明者是Google公司的Bob lee。
          他還寫了個輕量級IoC容器,據說不要配制文件,性能比spring快100倍。感覺100倍有些夸張,不過可以看看。

          posted on 2007-02-27 20:10 dreamstone 閱讀(7003) 評論(14)  編輯  收藏 所屬分類: 設計模式

          評論

          # re: 終于可以再Java中使用lazy loading了。[未登錄] 2007-02-27 20:49 cc

          多此一舉,Spring解決的問題不是性能問題!  回復  更多評論   

          # re: 終于可以再Java中使用lazy loading了。 2007-02-27 21:15 dreamstone

          這么說就無語了。
          首先什么叫多此一舉,哪些東西不是多此一舉?
          雖然有可能他的實現不能商業應用,但既然寫了這個東西就“有可能”有他存在的價值。

          另外我還沒看他寫的東西,不能說他好或者壞,但個人比較反感根本沒有了解就發表誤導性言論的做法。

          最后webwork在新的版本已經加入了他寫的IOC容器。


            回復  更多評論   

          # re: 終于可以再Java中使用lazy loading了。[未登錄] 2007-02-27 22:00 jini

          有時間找他寫的IoC來研究研究,學習學習  回復  更多評論   

          # re: 終于可以在Java中使用lazy loading了。[未登錄] 2007-02-28 01:04 Dennis

          這種以 Initialization on Demand Holder (IODH) 的 lazy loading 方式只能, 也只可以應用在
          Classloader scope 的 static scope singleton 上

          對特定存取區域,或 "不確定" Classloader 情況下
          只能用回 synchronized 方法

          (根據 Bob lee 本人的 blog, 引述 Effective Java 一書的說明)

          另, 這方法 "不是" Bob lee 本人發明的.
          他也只是讀回來的, 他在 blog 中也有提到  回復  更多評論   

          # re: 終于可以在Java中使用lazy loading了。[未登錄] 2007-02-28 09:46 dreamstone

          to Dennis:
          謝謝提醒,另問一下什么情況下這個方式會失效,能不能舉個例子說明一下?
            回復  更多評論   

          # re: 終于可以在Java中使用lazy loading了。 2007-02-28 11:10 BeanSoft

          支持一下, 不錯!  回復  更多評論   

          # re: 終于可以在Java中使用lazy loading了。 2007-02-28 12:10 dreamstone

          嗯,找了一下Effective Java,在Item 48 找到了,果然不是Bob lee發明的,不過這種寫法還是值得借鑒。另外,對與Effective Java中解釋的話有些不了解,
          誰能給解釋一下:
          這句:The only shortcoming of the idiom is that it does not work for instance fields ,only for static instance fields
          雖然字面意思知到,但是還是不明白他講的實際問題。  回復  更多評論   

          # re: 終于可以在Java中使用lazy loading了。 2007-02-28 12:11 dreamstone

          另外這里關于這個問題還有一些討論,
          http://weblogs.java.net/blog/kirillcool/archive/2005/08/how_single_is_y.html

          而作者的做法居然是用程序寫代碼,臨時編繹,也算夠走火入魔的。不過下邊的討論還是不錯的。  回復  更多評論   

          # re: 終于可以在Java中使用lazy loading了。[未登錄] 2007-02-28 13:27 dennis

          這樣的寫法不是新鮮主意了,在讀《設計模式精解》關于singleton那章時特意查過。  回復  更多評論   

          # re: 終于可以在Java中使用lazy loading了。 2007-02-28 14:18 dreamstone

          to dennis:
          建議你如果回文章的話盡量提供一下支持你自己觀點的資料。
          不知道你說的“ 對特定存取區域,或 "不確定" Classloader 情況下”是什么情況

          不然的話看文章的人懂得懂了,不懂的還不懂。

          謝謝。如果我找到會補上。  回復  更多評論   

          # re: 終于可以在Java中使用lazy loading的單態了[未登錄] 2007-02-28 15:54 dennis

          @dreamstone
          sorry,我并沒有別的意思。
          我是在讀《設計模式精解》時那章singleton時提到double-check也無法解決多線程實現singleton模式的問題時,特意google了下代碼,這是我收藏夾里的文章:http://www.j2medev.com/Article/Class3/pattern/200511/1004.html  回復  更多評論   

          # re: 終于可以在Java中使用lazy loading的單態了 2007-02-28 17:56 dreamstone

          找到了什么情況下會有多個ClassLoader了,這篇文章中有些內容講了為什么會有多個ClassLoader。
          http://www.aygfsteel.com/dreamstone/archive/2007/02/28/101183.html

          另to dennis:
          謝謝提供資源,希望能提出更多問題,多交流。。  回復  更多評論   

          # re: 終于可以在Java中使用lazy loading的單態了 2014-06-04 15:50 kizz

          純扯淡  回復  更多評論   

          # re: 終于可以在Java中使用lazy loading的單態了 2016-11-11 14:29 NewSea

          學習。  回復  更多評論   

          主站蜘蛛池模板: 红桥区| 大安市| 德保县| 故城县| 巴南区| 修水县| 桂阳县| 探索| 绵竹市| 鞍山市| 洛阳市| 防城港市| 宁武县| 虎林市| 双峰县| 永宁县| 会昌县| 惠东县| 铜梁县| 湘阴县| 西华县| 泰州市| 馆陶县| 渭南市| 天等县| 二连浩特市| 剑阁县| 无棣县| 安陆市| 渭南市| 玉山县| 鄯善县| 铜鼓县| 安宁市| 公安县| 武隆县| 麟游县| 泽州县| 永安市| 江永县| 宾阳县|