DANCE WITH JAVA

          開(kāi)發(fā)出高質(zhì)量的系統(tǒng)

          常用鏈接

          統(tǒng)計(jì)

          積分與排名

          好友之家

          最新評(píng)論

          終于可以在Java中使用lazy loading的單態(tài)了

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

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

          這個(gè)寫(xiě)法的發(fā)明者是Google公司的Bob lee。
          他還寫(xiě)了個(gè)輕量級(jí)IoC容器,據(jù)說(shuō)不要配制文件,性能比spring快100倍。感覺(jué)100倍有些夸張,不過(guò)可以看看。

          posted on 2007-02-27 20:10 dreamstone 閱讀(7003) 評(píng)論(14)  編輯  收藏 所屬分類(lèi): 設(shè)計(jì)模式

          評(píng)論

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

          多此一舉,Spring解決的問(wèn)題不是性能問(wèn)題!  回復(fù)  更多評(píng)論   

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

          這么說(shuō)就無(wú)語(yǔ)了。
          首先什么叫多此一舉,哪些東西不是多此一舉?
          雖然有可能他的實(shí)現(xiàn)不能商業(yè)應(yīng)用,但既然寫(xiě)了這個(gè)東西就“有可能”有他存在的價(jià)值。

          另外我還沒(méi)看他寫(xiě)的東西,不能說(shuō)他好或者壞,但個(gè)人比較反感根本沒(méi)有了解就發(fā)表誤導(dǎo)性言論的做法。

          最后webwork在新的版本已經(jīng)加入了他寫(xiě)的IOC容器。


            回復(fù)  更多評(píng)論   

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

          有時(shí)間找他寫(xiě)的IoC來(lái)研究研究,學(xué)習(xí)學(xué)習(xí)  回復(fù)  更多評(píng)論   

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

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

          對(duì)特定存取區(qū)域,或 "不確定" Classloader 情況下
          只能用回 synchronized 方法

          (根據(jù) Bob lee 本人的 blog, 引述 Effective Java 一書(shū)的說(shuō)明)

          另, 這方法 "不是" Bob lee 本人發(fā)明的.
          他也只是讀回來(lái)的, 他在 blog 中也有提到  回復(fù)  更多評(píng)論   

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

          to Dennis:
          謝謝提醒,另問(wèn)一下什么情況下這個(gè)方式會(huì)失效,能不能舉個(gè)例子說(shuō)明一下?
            回復(fù)  更多評(píng)論   

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

          支持一下, 不錯(cuò)!  回復(fù)  更多評(píng)論   

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

          嗯,找了一下Effective Java,在Item 48 找到了,果然不是Bob lee發(fā)明的,不過(guò)這種寫(xiě)法還是值得借鑒。另外,對(duì)與Effective Java中解釋的話(huà)有些不了解,
          誰(shuí)能給解釋一下:
          這句:The only shortcoming of the idiom is that it does not work for instance fields ,only for static instance fields
          雖然字面意思知到,但是還是不明白他講的實(shí)際問(wèn)題。  回復(fù)  更多評(píng)論   

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

          另外這里關(guān)于這個(gè)問(wèn)題還有一些討論,
          http://weblogs.java.net/blog/kirillcool/archive/2005/08/how_single_is_y.html

          而作者的做法居然是用程序?qū)懘a,臨時(shí)編繹,也算夠走火入魔的。不過(guò)下邊的討論還是不錯(cuò)的。  回復(fù)  更多評(píng)論   

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

          這樣的寫(xiě)法不是新鮮主意了,在讀《設(shè)計(jì)模式精解》關(guān)于singleton那章時(shí)特意查過(guò)。  回復(fù)  更多評(píng)論   

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

          to dennis:
          建議你如果回文章的話(huà)盡量提供一下支持你自己觀點(diǎn)的資料。
          不知道你說(shuō)的“ 對(duì)特定存取區(qū)域,或 "不確定" Classloader 情況下”是什么情況

          不然的話(huà)看文章的人懂得懂了,不懂的還不懂。

          謝謝。如果我找到會(huì)補(bǔ)上。  回復(fù)  更多評(píng)論   

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

          @dreamstone
          sorry,我并沒(méi)有別的意思。
          我是在讀《設(shè)計(jì)模式精解》時(shí)那章singleton時(shí)提到double-check也無(wú)法解決多線(xiàn)程實(shí)現(xiàn)singleton模式的問(wèn)題時(shí),特意google了下代碼,這是我收藏夾里的文章:http://www.j2medev.com/Article/Class3/pattern/200511/1004.html  回復(fù)  更多評(píng)論   

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

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

          另to dennis:
          謝謝提供資源,希望能提出更多問(wèn)題,多交流。。  回復(fù)  更多評(píng)論   

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

          純扯淡  回復(fù)  更多評(píng)論   

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

          學(xué)習(xí)。  回復(fù)  更多評(píng)論   

          主站蜘蛛池模板: 淮南市| 阿尔山市| 寿宁县| 双柏县| 理塘县| 太湖县| 博乐市| 呼玛县| 大足县| 满城县| 福建省| 临猗县| 郴州市| 兴义市| 遂宁市| 乐业县| 怀仁县| 怀柔区| 乌鲁木齐市| 通城县| 平江县| 玛沁县| 新化县| 宜春市| 鄂伦春自治旗| 繁昌县| 东山县| 元江| 四会市| 成安县| 上思县| 漳平市| 乐至县| 长治市| 自贡市| 文山县| 平泉县| 七台河市| 兖州市| 台中县| 顺平县|