JiveJdon Community Forums
在线259人   首页   主题表   培训咨询   标签   查搜   注册    登陆 RSS
首页 » 论坛 » 并行异步等伸缩性讨论
???en_US.forumThreadPrev.name??? 上一主题
google yahoo 365Key网摘 CSDN网摘 添加到百度搜藏 POCO网摘 新浪ViVi QQ网摘
???en_US.forumThreadNext.name??? 下一主题
Go 共有 12 回复(1页) 阅读11次
 发表新帖子   回复该主题贴
hxz



发表文章:
注册时间: 2002年12月03日
悄悄话
个人博客
在线? 当前离线
我要关注该作者发言
bq看看这个,既然可以这样为什么还要用dcl 2003年01月09日 10:06 收藏关注本主题 到本帖网址 加入本帖到收藏夹 请用鼠标选择需要回复的文字再点按本回复键 回复该主题
标签     
public class Resource
{
private static final Resource instance = new Resource();

private Resource() {}

public static Resource getResource()
{
return instance;
}
}

这样不是可以避免DCL带来的多线程编程的麻烦以及你所提到的错误吗?
hxz



发表文章: 87
注册时间: 2002年12月03日
悄悄话
个人博客
在线? 当前离线
我要关注该作者发言
Re: bq看看这个,既然可以这样为什么还要用dcl 2003年01月09日 10:09 收藏关注本主题 到本帖网址 加入本帖到收藏夹 请用鼠标选择需要回复的文字再点按本回复键 回复该主题
再看看banq的单态,以经说明了这个问题!
dcl真是鸡肋啊!!!
http://www.javaresearch.org/article/showarticle.jsp?column=1&thread=982
jxb8901



发表文章: 117
注册时间: 2002年10月24日
悄悄话
个人博客
在线? 当前离线
我要关注该作者发言
Re: bq看看这个,既然可以这样为什么还要用dcl 2003年01月09日 18:08 收藏关注本主题 到本帖网址 加入本帖到收藏夹 请用鼠标选择需要回复的文字再点按本回复键 回复该主题
你这样不是失去了"懒惰初始化"的好处了吗?
banq



发表文章: 10844
注册时间: 2002年08月03日
悄悄话
个人博客
在线? 当前离线
我要关注该作者发言 26人关注
Re: bq看看这个,既然可以这样为什么还要用dcl 2003年01月09日 21:08 收藏关注本主题 到本帖网址 加入本帖到收藏夹 请用鼠标选择需要回复的文字再点按本回复键 回复该主题
你这个例子只是说明,实际线程使用中,会出现更复杂的DCL现象,导致系统在庞大用户同时在线时,系统运行混乱。
henry.t



发表文章:
注册时间: 2003年01月02日
悄悄话
个人博客
在线? 当前离线
我要关注该作者发言
Re: bq看看这个,既然可以这样为什么还要用dcl 2003年01月09日 22:54 收藏关注本主题 到本帖网址 加入本帖到收藏夹 请用鼠标选择需要回复的文字再点按本回复键 回复该主题
我来帮忙UP,这个问题我还是有点疑惑,看了DCL那么麻烦,而且在想要性能的时候有漏洞,想要安全的时候性能又不高,凭我现在的水平还看不出来像楼主这样和DCL比起来有什么不好的,当然,"懒惰初始化"是放弃了,但我们先忽略不记这个。其实我发现对这个问题不是很清楚的网友(当然包括我)不少的,BANG,看了你的回复,我觉得太笼统了,不是很详细,不可否认,本人水平也实在(连我自己都)不敢恭维,无法明白BANG你回复的具体意思:

“实际线程使用中,会出现更复杂的DCL现象,导致系统在庞大用户同时在线时,系统运行混乱。”

麻烦BANG在有空的时候就楼主的主题和你的这个回复详细的说明一下,为什么会这样,会发生你说的情况?希望我自己和没弄清楚的朋友得到提高,代表大家谢谢你。

hxz



发表文章: 87
注册时间: 2002年12月03日
悄悄话
个人博客
在线? 当前离线
我要关注该作者发言
Re: bq看看这个,既然可以这样为什么还要用dcl 2003年01月10日 11:17 收藏关注本主题 到本帖网址 加入本帖到收藏夹 请用鼠标选择需要回复的文字再点按本回复键 回复该主题
知道banq下面还有话说的!
搬登子听课!呵呵!
henry.t



发表文章: 148
注册时间: 2003年01月02日
悄悄话
个人博客
在线? 当前离线
我要关注该作者发言
Re: bq看看这个,既然可以这样为什么还要用dcl 2003年01月13日 23:06 收藏关注本主题 到本帖网址 加入本帖到收藏夹 请用鼠标选择需要回复的文字再点按本回复键 回复该主题
我想,大概是因为这个问题太简单而幼稚,所以BANG和众高手们都不削回答,不过,我对这个帖子等了好几天了,很辛苦,请大家本着扶贫的精神回答:

“实际线程使用中,会出现更复杂的DCL现象,导致系统在庞大用户同时在线时,系统运行混乱。”

为什么用楼主的方法会造成这样的结局,如果可能,请用例子来说明。

我想BANG做这个网站的目的是想帮助访问她的所有人提高水平,不会只针对那些少数的(当然不一定)水平很高的人,我来这里的时间不长,但自己感觉已经得到了不少帮助,很喜欢这里,但提高需要时间,任何人都有个过程,请对我这个水平很一般得人有点耐心,我会经常来这里学习的!

祝每个来这里的人有所得!
banq



发表文章: 10844
注册时间: 2002年08月03日
悄悄话
个人博客
在线? 当前离线
我要关注该作者发言 26人关注
Re: bq看看这个,既然可以这样为什么还要用dcl 2003年01月14日 10:08 收藏关注本主题 到本帖网址 加入本帖到收藏夹 请用鼠标选择需要回复的文字再点按本回复键 回复该主题
对不起,这样的例子举起来代码会很长,说明会很多.
你可以参看javaworld上的相关文章
iceant



发表文章:
注册时间: 2002年10月13日
悄悄话
个人博客
在线? 当前离线
我要关注该作者发言
Re: bq看看这个,既然可以这样为什么还要用dcl 2003年01月14日 23:39 收藏关注本主题 到本帖网址 加入本帖到收藏夹 请用鼠标选择需要回复的文字再点按本回复键 回复该主题
我找过一些资料来看,确实会有一些不可预知的可能性存在。
那就证明,DCL 不是一个好的方法,不用它就是了。
richardluopeng



发表文章: 71
注册时间: 2002年08月30日
悄悄话
个人博客
在线? 当前离线
我要关注该作者发言
Re: bq看看这个,既然可以这样为什么还要用dcl 2003年01月23日 13:44 收藏关注本主题 到本帖网址 加入本帖到收藏夹 请用鼠标选择需要回复的文字再点按本回复键 回复该主题
对不起,什么是DCL???
manbaum



发表文章:
注册时间: 2003年03月21日
悄悄话
个人博客
在线? 当前离线
我要关注该作者发言
Re: bq看看这个,既然可以这样为什么还要用dcl 2003年03月24日 17:12 收藏关注本主题 到本帖网址 加入本帖到收藏夹 请用鼠标选择需要回复的文字再点按本回复键 回复该主题
dcl = Double-checked locking

如下:

public static Singleton getInstance()
{
if (instance == null)
{
synchronized(Singleton.class) { //1
Singleton inst = instance; //2
if (inst == null)
{
synchronized(Singleton.class) { //3
//inst = new Singleton(); //4
instance = new Singleton();
}
//instance = inst; //5
}
}
}
return instance;
}

我觉得没必要 dcl,两次 synchronized 难道不花费更多的时间么?本来为了提高性能,反而把问题复杂化了。

class Singleton
{
private static Singleton instance;
private Vector v;
private boolean inUse;

private Singleton()
{
v = new Vector();
v.addElement(new Object());
inUse = true;
}

public static synchronized Singleton getInstance()
{
if (instance == null) //1
instance = new Singleton(); //2
return instance; //3
}
}

这样不会影响多少性能,不就是等待一个 return 的时间么。

class Singleton
{
private Vector v;
private boolean inUse;
private static Singleton instance = new Singleton();

private Singleton()
{
v = new Vector();
inUse = true;
//...
}

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

也可以,不用等,只是没有了 lazy initialize 好处。

shyguy



发表文章:
注册时间: 2002年09月02日
悄悄话
个人博客
在线? 当前离线
我要关注该作者发言
Re: bq看看这个,既然可以这样为什么还要用dcl 2003年04月11日 13:49 收藏关注本主题 到本帖网址 加入本帖到收藏夹 请用鼠标选择需要回复的文字再点按本回复键 回复该主题
因为有的时候必须lazy-load!
whyenglish



发表文章:
注册时间: 2009年07月01日
悄悄话
个人博客
在线? 当前离线
我要关注该作者发言
回复:Re: bq看看这个,既然可以这样为什么还要用dcl 2009年07月01日 13:49 收藏关注本主题 到本帖网址 加入本帖到收藏夹 请用鼠标选择需要回复的文字再点按本回复键 回复该主题
可以这样吗?
class Singleton
{
private static Singleton instance = null;
//enforce singleton
private Singleton() {
//...
}
public static Singleton getInstance()
{
if(instance == null){
synchronized(Singleton.class){
//check again
if(instance ==null ){
instance = new Singleton();
}
}
}
return instance;
}
}

不知道这样对性能的影响会有多大?一旦instance实例化后,第二次getInstance()就不会再运行到 synchronized(..)。为什么非要在方法上进行整个同步呢?这样做会产生多个Singleton的实例吗?
[该贴被whyenglish于2009-07-01 13:51修改过]
标签     
共有 12 回复(1页) Go
???en_US.forumThreadPrev.name??? 上一主题
  Go back to the topic 返回本主题   Go back to the topic listing返回主题列表    返回页首返回页首
???en_US.forumThreadNext.name??? 下一主题
正在读取,请等待...
查询本论坛内 回复超过的热门帖子
标题
 
粗体: [b]文本[/b] 斜体: [i]文本[/i] 下划线 [u]文本[/u] 插入网上的图片 [img]http://wwww.xxxx.com/img.ext[/img] 插入代码 [code]程序代码[/code]  插入url链接 [url]http://url[/url] / [url=http://url]URL加下滑线[/url] 上传图片 word文档 Txt等附件
内容
  提交时自动拷贝以上内容到剪贴板 Ctrl-V可取出;提问题前先查询标签列表

使用帮助 手机阅读 add to google add to yahoo
解惑之道在J道 ,打造中国最具影响力的的软件架构社区 推荐FireFox或Chrome快速浏览本站
OpenSource JIVEJDON Powered by JdonFramework Code © 2002-09 jdon.com
anti spam