cuiyi's blog(崔毅 crazycy)

记录点滴 鉴往事之得失 以资于发展
数据加载中……

读“Rails 2.2 新特性提示”的疑惑与解析

今天在javaeye读Rails 2.2 新特性提示 的时候,由于对于ROR没有知识储备和认识,所以对如下文产生了疑问
Rails的ActionController是每次HTTP请求创建实例的,因此本身就支持多线程运行;而ActiveRecord是单实例的,因此之前的版本不支持多线程。而Rails2.2改写了ActiveRecord相应的实现,使得ActiveRecord是线程安全的了

我的疑惑是
而ActiveRecord是单实例的,因此之前的版本不支持多线程。
-------------

单实例,就意味着不能多线程么?
public class SimpleSingleton {
  
private static final SimpleSingleton instance = new SimpleSingleton ();
  
public static getInstance(){return instance;}
}
这个怎么能不支持多线程呢?

一直很疑惑,仔细想了想,慢慢推导
从 single-thread 到 multi-thread 的难点在于thread security 

而activerecord是单例,不支持multi
-thread, 意味着它肯定有很多私有属性从而是非线程安全的

所以改进:
1) 要么是改成每次创建新的
2) 要不就是去掉私有变量,而以参数形式重新构造 
 

在看到文中
使得ActiveRecord是线程安全的了

从而印证了自己的想法,得解

posted on 2008-10-27 23:20 crazycy 阅读(1199) 评论(1)  编辑  收藏 所属分类: JavaEE技术

评论

# re: 读“Rails 2.2 新特性提示”的疑惑与解析  回复  更多评论   

单实例,就意味着不能多线程么?

回答:并不是说不可以单例,只是在多线程下会存在:Double-checked Locking的问题。如果A,B在调用单例的瞬间,存在竞争条件。引用下google工程师Bob Lee的代码:
public class Singleton{
static class SingletonHolder{
static Singleton instance=new Singleton();
}

public static Singleton getInstance(){
return Singleton.instance();
}
}
2008-10-29 08:34 | yeshucheng

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


网站导航: