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 閱讀(1207) 評論(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
          主站蜘蛛池模板: 舞钢市| 江北区| 瑞昌市| 商都县| 双鸭山市| 陆丰市| 正镶白旗| 德庆县| 股票| 邵武市| 德兴市| 兴山县| 徐闻县| 息烽县| 铜川市| 册亨县| 邵阳县| 全州县| 长沙县| 南昌县| 东丰县| 积石山| 杂多县| 离岛区| 定西市| 遂溪县| 阜城县| 灵山县| 宜春市| 泗洪县| 新邵县| 富平县| 沂源县| 贞丰县| 巴林左旗| 那坡县| 镇雄县| 安顺市| 元朗区| 赞皇县| 屯留县|