cuiyi's blog(崔毅 crazycy)

          記錄點滴 鑒往事之得失 以資于發(fā)展
          數(shù)據(jù)加載中……

          讀“Rails 2.2 新特性提示”的疑惑與解析

          今天在javaeye讀Rails 2.2 新特性提示 的時候,由于對于ROR沒有知識儲備和認識,所以對如下文產生了疑問
          Rails的ActionController是每次HTTP請求創(chuàng)建實例的,因此本身就支持多線程運行;而ActiveRecord是單實例的,因此之前的版本不支持多線程。而Rails2.2改寫了ActiveRecord相應的實現(xiàn),使得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) 要么是改成每次創(chuàng)建新的
          2) 要不就是去掉私有變量,而以參數(shù)形式重新構造 
           

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

          從而印證了自己的想法,得解

          posted on 2008-10-27 23:20 crazycy 閱讀(1204) 評論(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
          主站蜘蛛池模板: 井陉县| 武威市| 团风县| 资讯 | 惠东县| 永善县| 三原县| 鹿邑县| 长海县| 平原县| 张北县| 滕州市| 苍溪县| 剑河县| 抚松县| 新宁县| 洪湖市| 华坪县| 吉首市| 策勒县| 彝良县| 万山特区| 深水埗区| 辽阳市| 清徐县| 延长县| 吴江市| 徐州市| 玛多县| 彭州市| 靖安县| 多伦县| 广汉市| 漠河县| 个旧市| 津南区| 茌平县| 资阳市| 巴楚县| 醴陵市| 沙河市|