cuiyi's blog(崔毅 crazycy)

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

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

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

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

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

          posted on 2008-10-27 23:20 crazycy 閱讀(1203) 評論(1)  編輯  收藏 所屬分類: JavaEE技術(shù)

          評論

          # re: 讀“Rails 2.2 新特性提示”的疑惑與解析  回復  更多評論   

          單實例,就意味著不能多線程么?

          回答:并不是說不可以單例,只是在多線程下會存在:Double-checked Locking的問題。如果A,B在調(diào)用單例的瞬間,存在競爭條件。引用下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
          主站蜘蛛池模板: 岳阳市| 光山县| 五华县| 佛坪县| 绥中县| 商水县| 高清| 罗山县| 镇安县| 勃利县| 陇南市| 灌云县| 安化县| 成都市| 正蓝旗| 营口市| 安丘市| 南澳县| 驻马店市| 平远县| 五台县| 汉沽区| 揭西县| 万安县| 加查县| 黎川县| 东丽区| 常山县| 高邑县| 安丘市| 镇康县| 郯城县| 乃东县| 黑河市| 永丰县| 南川市| 宜兰市| 桐城市| 东阿县| 临泉县| 明水县|