终于可以在java中使用lazy loading的单态了 -凯发k8网页登录

开发出高质量的系统

常用链接

统计

积分与排名

好友之家

最新评论

在我的这篇文章http://www.blogjava.net/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 阅读(6822) 评论(14)     所属分类: 设计模式

# re: 终于可以再java中使用lazy loading了。[未登录] 2007-02-27 20:49

多此一举,spring解决的问题不是性能问题!  回复     

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

这么说就无语了。
首先什么叫多此一举,哪些东西不是多此一举?
虽然有可能他的实现不能商业应用,但既然写了这个东西就“有可能”有他存在的价值。

另外我还没看他写的东西,不能说他好或者坏,但个人比较反感根本没有了解就发表误导性言论的做法。

最后webwork在新的版本已经加入了他写的ioc容器。


  回复     

# re: 终于可以再java中使用lazy loading了。[未登录] 2007-02-27 22:00

有时间找他写的ioc来研究研究,学习学习  回复     

# re: 终于可以在java中使用lazy loading了。[未登录] 2007-02-28 01:04

這種以 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

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

另外这里关于这个问题还有一些讨论,


而作者的做法居然是用程序写代码,临时编绎,也算够走火入魔的。不过下边的讨论还是不错的。  回复     

# re: 终于可以在java中使用lazy loading了。[未登录] 2007-02-28 13:27

这样的写法不是新鲜主意了,在读《设计模式精解》关于singleton那章时特意查过。  回复  更多评论   

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

to dennis:
建议你如果回文章的话尽量提供一下支持你自己观点的资料。
不知道你说的“ 對特定存取區域,或 "不確定" classloader 情況下”是什么情况

不然的话看文章的人懂得懂了,不懂的还不懂。

谢谢。如果我找到会补上。  回复     

# re: 终于可以在java中使用lazy loading的单态了[未登录] 2007-02-28 15:54

@dreamstone
sorry,我并没有别的意思。
我是在读《设计模式精解》时那章singleton时提到double-check也无法解决多线程实现singleton模式的问题时,特意google了下代码,这是我收藏夹里的文章:  回复  更多评论   

# re: 终于可以在java中使用lazy loading的单态了 2007-02-28 17:56 dreamstone

找到了什么情况下会有多个classloader了,这篇文章中有些内容讲了为什么会有多个classloader。


另to dennis:
谢谢提供资源,希望能提出更多问题,多交流。。  回复     

# re: 终于可以在java中使用lazy loading的单态了 2014-06-04 15:50

纯扯淡  回复     

# re: 终于可以在java中使用lazy loading的单态了 2016-11-11 14:29

学习。  回复     


只有注册用户后才能发表评论。


网站导航:
              
 
网站地图